home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Standards 1994 January / InfoMagic Standards - January 1994.iso / ccitt / 1988 / troff / 10_2_04.tro < prev    next >
Text File  |  1991-12-12  |  75KB  |  2,581 lines

  1. .rs
  2. .\" Troff code generated by TPS Convert from ITU Original Files
  3. .\"                 Not Copyright ( c) 1991 
  4. .\"
  5. .\" Assumes tbl, eqn, MS macros, and lots of luck.
  6. .TA 1c 2c 3c 4c 5c 6c 7c 8c
  7. .ds CH
  8. .ds CF
  9. .EQ
  10. delim @@
  11. .EN
  12. .nr LL 40.5P
  13. .nr ll 40.5P
  14. .nr HM 3P
  15. .nr FM 6P
  16. .nr PO 4P
  17. .nr PD 9p
  18. .po 4P
  19.  
  20. .rs
  21. \v | 5i'
  22. .sp 1P
  23. .LP
  24. D.5.4
  25.      \fIDirectives applicables \*`a la repr\*'esentation en fonction des\fR 
  26. \fI\*'etats et aux \*'el\*'ements graphiques\fR 
  27. .sp 9p
  28. .RT
  29. .PP
  30. Le pr\*'esent paragraphe d\*'ecrit la repr\*'esentation en fonction des
  31. \*'etats du LDS/GR et des \*'el\*'ements graphiques utilis\*'es.
  32. .PP
  33. Le \(sc\ D.5.4.1 contient des observations d'ordre g\*'en\*'eral sur la
  34. repr\*'esentation en fonction des \*'etats: caract\*'eristiques, applications
  35. pertinentes et variantes.
  36. .PP
  37. Le \(sc\ D.5.4.2 explique la description d'\*'etats au moyen d'\*'el\*'ements
  38. graphiques.
  39. .RT
  40. .sp 1P
  41. .LP
  42. D.5.4.1
  43.      \fIObservations d'ordre g\*'en\*'eral sur la repr\*'esentation en fonction\fR 
  44. \fIdes \*'etats\fR 
  45. .sp 9p
  46. .RT
  47. .PP
  48. Le LDS/GR offre trois versions diff\*'erentes pour d\*'ecrire un
  49. diagramme de processus.
  50. .PP
  51. La premi\*`ere est appel\*'ee version du LDS/GR en fonction des
  52. transitions, dans laquelle les transitions sont d\*'ecrites exclusivement 
  53. par des symboles d'action explicites. 
  54. .PP
  55. La seconde est appel\*'ee version du LDS/GR orient\*'ee vers les \*'etats ou
  56. extension graphique du LDS orient\*'ee vers les \*'etats; les \*'etats 
  57. d'un processus 
  58. y sont d\*'ecrits \*`a l'aide d'illustrations d'\*'etats et les transitions 
  59. ne sont 
  60. donn\*'ees qu'implicitement, par les diff\*'erences entre les \*'etats 
  61. de d\*'epart et 
  62. d'arriv\*'ee.
  63. .PP
  64. La derni\*`ere est appel\*'ee version mixte; il s'agit d'une combinaison
  65. des deux versions pr\*'ec\*'edentes.
  66. .PP
  67. On trouvera des exemples de ces trois versions dans l'annexe\ E du
  68. pr\*'esent fascicule.
  69. .PP
  70. La version orient\*'ee vers les transitions convient lorsque la s\*'equence 
  71. des actions pr\*'esente plus d'importance que la description d\*'etaill\*'ee 
  72. des 
  73. \*'etats.
  74. .PP
  75. La version orient\*'ee vers les \*'etats d\*'ecrit en d\*'etail les \*'etats 
  76. par des \*'enonc\*'es; elle convient donc au cas o\*`u un \*'etat de processus 
  77. pr\*'esente plus 
  78. d'importance que la s\*'equence des actions \*`a l'int\*'erieur de chaque 
  79. transition, alors que l'explication graphique intuitive est souhaitable 
  80. et qu'il est 
  81. int\*'eressant de conna\* | tre les ressources ainsi que leurs relations 
  82. avec les 
  83. \*'etats.
  84. .PP
  85. Les illustrations d'\*'etat sont g\*'en\*'eralement exprim\*'ees par des 
  86. \*'el\*'ements graphiques indiquant les ressources pertinentes de l'\*'etat 
  87. en cours du 
  88. processus. Cette version convient \*`a des applications dans lesquelles sont
  89. d\*'efinis des \*'el\*'ements graphiques appropri\*'es; l'utilisateur peut 
  90. donc employer 
  91. cette repr\*'esentation pour n'importe quelle application en d\*'efinissant des
  92. \*'el\*'ements graphiques appropri\*'es selon les besoins.
  93. .PP
  94. La version mixte convient lorsqu'il faut conna\* | tre \*`a la fois la
  95. s\*'equence des actions int\*'erieures \*`a chaque transition et les descriptions 
  96. d\*'etaill\*'ees des \*'etats.
  97. .RT
  98. .sp 2P
  99. .LP
  100. D.5.4.2
  101.     \fIIllustration d'\*'etat et \*'el\*'ement graphique\fR 
  102. .sp 1P
  103. .RT
  104. .sp 1P
  105. .LP
  106. D.5.4.2.1\ \ 
  107. \fIEl\*'ement graphique et texte qualificatif\fR 
  108. .sp 9p
  109. .RT
  110. .PP
  111. Si l'on a choisi l'option illustration d'\*'etat, celle\(hyci se compose 
  112. d'\*'el\*'ements graphiques et d'un texte qualificatif, comme indiqu\*'e 
  113. dans la 
  114. figure\ D\(hy5.4.1\ a) \*`a\ D\(hy5.4.1\ d).
  115. .PP
  116. Cette combinaison rend compr\*'ehensibles les illustrations d'\*'etat. A
  117. titre d'exemple, la figure\ D\(hy5.4.1\ a) donne la signification d'un 
  118. r\*'ecepteur 
  119. \*`a cadran manipul\*'e par le processus, l'exemple\ b) celle d'un \*'emetteur 
  120. de 
  121. tonalit\*'e de num\*'erotation \*'emettant un signal permanent vers
  122. l'environnement.
  123. .PP
  124. A noter que les signaux de sortie (signaux non permanents) et les
  125. ressources pertinentes ne sont pas d\*'ecrits dans les illustrations d'\*'etat;
  126. les signaux de sortie peuvent \* | tre d\*'ecrits dans un diagramme de
  127. transition.
  128. .PP
  129. L'exemple c) montre un temporisateur dont l'expiration est toujours
  130. repr\*'esent\*'ee par une entr\*'ee. A noter que l'illustration graphique 
  131. recommand\*'ee 
  132. pour le temporisateur comporte le signal d'entr\*'ee pertinent\ t1.
  133. .PP
  134. Le dernier exemple, d), signifie qu'un enregistreur de messages
  135. vocaux est en cours de fonctionnement.
  136. .PP
  137. L'identit\*'e de la ressource peut \* | tre consid\*'erablement abr\*'eg\*'ee 
  138. et 
  139. devrait, si possible, \* | tre plac\*'ee \*`a l'int\*'erieur de l'illustration 
  140. graphique appropri\*'ee. Ainsi, les \*'el\*'ements graphiques qui sont 
  141. qualifi\*'es sont tout \*`a fait \*'evidents. 
  142. .RT
  143. .sp 1P
  144. .LP
  145. D.5.4.2.2\ \ \fIIllustrations d'\*'etat compl\*`etes\fR 
  146. .sp 9p
  147. .RT
  148. .PP
  149. Chaque illustration d'\*'etat doit comporter un nombre suffisant
  150. d'\*'el\*'ements graphiques afin de montrer:
  151. .RT
  152. .LP
  153.     a)
  154.     quelles ressources le processus met en oeuvre au cours de
  155. l'\*'etat repr\*'esent\*'e. Exemples: trajets de commutation, r\*'ecepteurs de
  156. signalisation, \*'emetteurs de signaux permanents et modules de commutation;
  157. .LP
  158.     b)
  159.     s'il y a en ce moment un ou plusieurs temporisateurs qui
  160. contr\* | lent le processus;
  161. .LP
  162.     c)
  163.     dans le cas o\*`u le processus concerne le traitement des
  164. appels, si la taxation est ou non actuellement en cours et quels abonn\*'es 
  165. sont tax\*'es au cours de cette phase de l'appel; 
  166. .bp
  167. .LP
  168.     d)
  169.      quels objets appartenant effectivement \*`a un autre processus (environnement) 
  170. sont consid\*'er\*'es comme en relation avec des ressources du 
  171. processus pendant l'\*'etat en cours;
  172. .LP
  173.     e)
  174.     les signaux permanents de sortie qui sont \*'emis dans cet
  175. \*'etat;
  176. .LP
  177.     f
  178. )
  179.     la relation entre les signaux et ressources existants  dans l'\*'etat;
  180. .LP
  181.     g)
  182.     l'inventaire des ressources concernant l'\*'etat en cours du
  183. processus.
  184. .LP
  185. .rs
  186. .sp 31P
  187. .ad r
  188. \fBFigura D\(hy5.4.1, (N), p. 1\fR 
  189. .sp 1P
  190. .RT
  191. .ad b
  192. .RT
  193. .sp 1P
  194. .LP
  195. D.5.4.2.3\ \ \fIExemple\fR 
  196. .sp 9p
  197. .RT
  198. .PP
  199. A titre d'exemple d'application des principes expos\*'es ci\(hydessus,
  200. consid\*'erons l'\*'etat de la figure\ D\(hy5.4.2. On peut voir que, dans cet
  201. \*'etat:
  202. .RT
  203. .LP
  204.     a)
  205.     les ressources affect\*'ees aux processus sont: un r\*'ecepteur
  206. de chiffres \*`a cadran, un \*'emetteur de tonalit\*'es de num\*'erotation, 
  207. un poste 
  208. d'abonn\*'e appartenant \*`a l'environnement et des trajets de communication 
  209. reliant ces organes; 
  210. .LP
  211.     b)
  212.     un temporisateur\ t0 surveille le processus;
  213. .LP
  214.     c)
  215.     aucune taxation n'est en cours;
  216. .LP
  217.     d)
  218.     l'abonn\*'e est identifi\*'e comme l'abonn\*'e\ A mais aucune autre
  219. information de cat\*'egorie n'est prise en consid\*'eration;
  220. .LP
  221.     e)
  222.     les signaux d'entr\*'ee suivants sont attendus: A
  223. \(ulon
  224. \(ulhook (A\ raccroch\*'e), digit (chiffre) (chiffre num\*'erot\*'e) et\ 
  225. t0 (le 
  226. temporisateur de supervision t0\ fonctionne);
  227. .LP
  228.     f
  229. )
  230.     le signal permanent de sortie DT (tonalit\*'e de
  231. num\*'erotation) a \*'et\*'e mis avant cet \*'etat et pendant celui\(hyci.
  232. .bp
  233. .LP
  234. .rs
  235. .sp 23P
  236. .ad r
  237. \fBFigure D\(hy5.4.2, (N), p. 2\fR 
  238. .sp 1P
  239. .RT
  240. .ad b
  241. .RT
  242. .sp 1P
  243. .LP
  244. D.5.4.2.4\ \ \fIV\*'erification de la coh\*'erence de diagrammes LDS avec 
  245. \*'el\*'ements\fR \fIgraphiques\fR 
  246. .sp 9p
  247. .RT
  248. .PP
  249. On constate que l'illustration d'\*'etat est plus compacte et que,
  250. d'une certaine mani\*`ere, elle offre au lecteur plus d'informations; cependant, 
  251. l'identification de la s\*'erie exacte d'op\*'erations accomplies au cours 
  252. de la 
  253. transition exige un examen tr\*`es attentif des ressources.
  254. .PP
  255. En outre, une simple observation de l'illustration d'\*'etat ne permet
  256. pas de d\*'eterminer l'ordre des actions dans la transition.
  257. .PP
  258. Les \*'el\*'ements graphiques repr\*'esent\*'es \*`a l'ext\*'erieur du 
  259. bloc sont des 
  260. \*'el\*'ements qui ne sont pas directement command\*'es par le processus 
  261. donn\*'e: ceux qui sont repr\*'esent\*'es \*`a l'int\*'erieur du symbole 
  262. <<limites du bloc>> sont directement command\*'es par ce processus. Par 
  263. exemple, le processus d'appel partiellement 
  264. sp\*'ecifi\*'e dans la figure\ D\(hy5.4.3 peut allouer ou lib\*'erer l'\*'emetteur 
  265. de tonalit\*'e d'appel, l'\*'emetteur de sonnerie et les trajets de conversation; 
  266. il peut 
  267. \*'egalement d\*'eclencher ou arr\* | ter le temporisateur\ T4, mais il 
  268. ne peut commander directement la condition du combin\*'e de l'abonn\*'e. 
  269. .PP
  270. En concevant la logique \*`a partir d'une sp\*'ecification LDS avec
  271. \*'el\*'ements graphiques, seuls les \*'el\*'ements graphiques repr\*'esent\*'es 
  272. \*`a l'int\*'erieur des limites du bloc ont une influence sur les actions 
  273. ex\*'ecut\*'ees pendant les 
  274. s\*'equences de la transition. Les \*'el\*'ements graphiques complexes 
  275. repr\*'esent\*'es \*`a 
  276. l'int\*'erieur des limites de ce bloc sont normalement inlus dans une illustration 
  277. d'\*'etat: 
  278. .RT
  279. .LP
  280.     a)
  281.     soit parce qu'ils indiquent les ressources et l'\*'etat de
  282. l'environnement concern\*'es par le signal d'entr\*'ee du processus pendant 
  283. l'\*'etat 
  284. donn\*'e;
  285. .LP
  286.     b)
  287.     soit pour am\*'eliorer l'intelligibilit\*'e du
  288. diagramme.
  289. .sp 1P
  290. .LP
  291. D.5.4.2.5\ \ 
  292. \fIUtilisation du symbole <<temporisateur>>\fR 
  293. .sp 9p
  294. .RT
  295. .PP
  296. Que l'on emploie ou non des \*'el\*'ements graphiques, l'expiration d'un 
  297. d\*'elai de temporisation est toujours repr\*'esent\*'ee par une entr\*'ee. 
  298. .PP
  299. La pr\*'esence d'un symbole de temporisateur dans une illustration
  300. d'\*'etat implique qu'un temporisateur fonctionne pendant cet \*'etat.
  301. .bp
  302. .RT
  303. .LP
  304. .rs
  305. .sp 38P
  306. .ad r
  307. \fBFigure D\(hy5.4.3, (N), p. 3\fR 
  308. .sp 1P
  309. .RT
  310. .ad b
  311. .RT
  312. .PP
  313. Conform\*'ement au principe g\*'en\*'eral expos\*'e dans les Recommandations,
  314. le d\*'emarrage, l'arr\* | t, le red\*'emarrage et l'expiration du temporisateur 
  315. sont repr\*'esent\*'es \*`a l'aide d'\*'el\*'ements graphiques de la mani\*`ere
  316. suivante:
  317. .RT
  318. .LP
  319.     a)
  320.     pour montrer qu'une temporisation commence au cours d'une
  321. transition donn\*'ee, le symbole temporisateur doit appara\* | tre sur 
  322. l'illustration d'\*'etat qui correspond \*`a la fin de cette transition 
  323. et non sur celle qui 
  324. correspond \*`a son d\*'ebut;
  325. .LP
  326.     b)
  327.      inversement, pour montrer qu'une temporisation s'arr\* | te au cours 
  328. d'une transition, le symbole temporisateur doit appara\* | tre sur 
  329. l'illustration d'\*'etat qui correspond au d\*'ebut de cette transition 
  330. et non sur 
  331. celle qui correspond \*`a sa fin;
  332. .LP
  333.     c)
  334.     pour montrer qu'une temporisation est relanc\*'ee au cours
  335. d'une transition un symbole explicite de t\* | che doit \* | tre repr\*'esent\*'e 
  336. dans 
  337. cette transition (on en voit deux exemples sur la figure\ D\(hy5.4.4);
  338. .LP
  339.     d)
  340.     l'expiration du d\*'elai d'une temporisation donn\*'ee est
  341. repr\*'esent\*'ee par un symbole d'entr\*'ee associ\*'e \*`a un \*'etat 
  342. dont l'illustration 
  343. porte le symbole <<temporisateur>> correspondant. Il peut naturellement 
  344. arriver que plusieurs temporisateurs surveillent \*`a la fois le m\* | me 
  345. processus (voir la figure\ D\(hy5.4.5). 
  346. .bp
  347. .LP
  348. .rs
  349. .sp 47P
  350. .ad r
  351. \fBFigure D\(hy5.4.4, (N), p. 4\fR 
  352. .sp 1P
  353. .RT
  354. .ad b
  355. .RT
  356. .LP
  357. .bp
  358. .LP
  359. .rs
  360. .sp 37P
  361. .ad r
  362. \fBFigure D\(hy5.4.5, (N), p. 5\fR 
  363. .sp 1P
  364. .RT
  365. .ad b
  366. .RT
  367. .sp 1P
  368. .LP
  369. D.5.5
  370.     \fIDiagrammes auxiliaires\fR 
  371. .sp 9p
  372. .RT
  373. .PP
  374. Pour faciliter la lecture et la compr\*'ehension de diagrammes de
  375. processus de grande taille et/ou complexes, l'auteur peut y ajouter des
  376. diagrammes auxiliaires informels. De tels documents ont pour but de donner 
  377. une description synoptique ou simplifi\*'ee du comportement du processus 
  378. (ou d'une 
  379. partie de celui\(hyci). Les documents auxiliaires ne remplacent pas les 
  380. documents en LDS mais constituent une introduction \*`a ceux\(hyci. 
  381. .PP
  382. On trouvera dans la pr\*'esente section des exemples de certains
  383. diagrammes auxiliaires couramment utilis\*'es, notamment des diagrammes
  384. synoptiques d'\*'etat, des matrices \*'etat/signal, et des diagrammes de
  385. s\*'equencement. (Le diagramme en arbre de bloc d\*'ecrit au \(sc\ D.4.4 
  386. est \*'egalement 
  387. un diagramme auxiliaire.)
  388. .RT
  389. .sp 1P
  390. .LP
  391. D.5.5.1
  392.     \fIDiagramme synoptique d'\*'etat\fR 
  393. .sp 9p
  394. .RT
  395. .PP
  396. Son objectif est de donner une vue d'ensemble des \*'etats d'un
  397. processus, et d'indiquer quelles transitions sont possibles entre eux. Etant
  398. donn\*'e qu'il s'agit de donner un aper\*,cu, l'on peut n\*'egliger les 
  399. \*'etats ou les 
  400. transitions de peu d'importance.
  401. .bp
  402. .PP
  403. Les diagrammes se composent de symboles d'\*'etat, de fl\*`eches
  404. repr\*'esentant des transitions et, \*'eventuellement, de symboles de d\*'ebut 
  405. et 
  406. d'arr\* | t.
  407. .PP
  408. Le symbole d'\*'etat doit indiquer le nom de l'\*'etat r\*'ef\*'erenc\*'e. 
  409. Plusieurs noms d'\*'etat peuvent \* | tre inscrits dans le symbole, et 
  410. il est possible 
  411. d'employer un ast\*'erisque (*) pour d\*'esigner tous les \*'etats.
  412. .PP
  413. Chacune des fl\*`eches peut, de m\* | me que chacune des sorties possibles 
  414. pendant la transition, \* | tre associ\*'ee au nom du signal ou de l'ensemble 
  415. de 
  416. signaux qui d\*'eclenchent la transition.
  417. .PP
  418. On trouvera dans la figure\ D\(hy5.5.1 un exemple de diagramme synoptique 
  419. d'\*'etat. 
  420. .RT
  421. .LP
  422. .rs
  423. .sp 23P
  424. .ad r
  425. \fBFigure D\(hy5.5.1, (MC), p. 6\fR 
  426. .sp 1P
  427. .RT
  428. .ad b
  429. .RT
  430. .PP
  431. Il est possible de r\*'epartir sur plusieurs diagrammes le diagramme synoptique 
  432. d'\*'etat d'un processus; chacun des diagrammes obtenus porte alors sur 
  433. un aspect particulier, comme <<cas normal>>, traitement en cas de 
  434. d\*'efaillance,\ etc.
  435. .LP
  436. .rs
  437. .sp 14P
  438. .ad r
  439. \fBFigure D\(hy5.5.2, (N), p. 7\fR 
  440. .sp 1P
  441. .RT
  442. .ad b
  443. .RT
  444. .LP
  445. .bp
  446. .sp 1P
  447. .LP
  448. D.5.5.2
  449.     \fIMatrice \*'etat/signal\fR 
  450. .sp 9p
  451. .RT
  452. .PP
  453. La matrice \*'etat/signal doit servir de document <<pr\*'eliminaire>> \*`a 
  454. un diagramme de processus important. Elle indique les endroits o\*`u existent 
  455. des 
  456. combinaisons entre un \*'etat et un signal dans le diagramme.
  457. .PP
  458. Le diagramme se compose d'une matrice bidimensionnelle; celle\(hyci
  459. pr\*'esente sur un axe tous les \*'etats d'un processus, et sur l'autre 
  460. tous les 
  461. signaux d'entr\*'ee valides d'un processus. L'\*'etat suivant est donn\*'e 
  462. pour chaque \*'el\*'ement de matrice, de m\* | me que les sorties possibles 
  463. au cours de la 
  464. transition. Une r\*'ef\*'erence peut \* | tre indiqu\*'ee pour permettre 
  465. de trouver la 
  466. combinaison donn\*'ee par les indices, si elle existe.
  467. .PP
  468. L'\*'el\*'ement correspondant \*`a l'\*'etat fictif ou <<START>> et au signal
  469. fictif <<CREATE>> sert \*`a indiquer l'\*'etat initial du processus.
  470. .RT
  471. .LP
  472. .rs
  473. .sp 24P
  474. .ad r
  475. \fBFigure D\(hy5.5.3, (MC), p. 8\fR 
  476. .sp 1P
  477. .RT
  478. .ad b
  479. .RT
  480. .PP
  481. Il est possible de fractionner la matrice en sous\(hyparties
  482. r\*'eparties sur plusieurs pages. Les r\*'ef\*'erences sont celles qu'emploie
  483. normalement l'usager dans la documentation.
  484. .PP
  485. Les signaux et les \*'etats doivent \* | tre de pr\*'ef\*'erence regroup\*'es 
  486. de 
  487. fa\*,con que chaque partie de la matrice porte sur un aspect particulier du
  488. comportement du processus.
  489. .RT
  490. .sp 1P
  491. .LP
  492. D.5.5.3
  493.     \fIDiagramme de s\*'equencement\fR 
  494. .sp 9p
  495. .RT
  496. .PP
  497. Le diagramme de s\*'equencement peut servir \*`a montrer l'\*'echange des 
  498. s\*'equences de signaux autoris\*'ees entre un ou plusieurs processus et 
  499. leur 
  500. environnement.
  501. .PP
  502. Ce diagramme doit donner une vue d'ensemble de l'\*'echange de signaux
  503. entre les parties du syst\*`eme. Ce diagramme peut repr\*'esenter l'ensemble 
  504. ou une partie de l'\*'echange de signaux, en fonction des aspects \*`a 
  505. mettre en 
  506. \*'evidence.
  507. .PP
  508. Les colonnes du diagramme indiquent les entit\*'es en communication
  509. (services, processus, blocs ou l'environnement).
  510. .PP
  511. Leurs interactions sont illustr\*'ees par un ensemble de lignes fl\*'ech\*'ees, 
  512. dont chacune repr\*'esente un signal ou un ensemble de signaux. 
  513. .bp
  514. .RT
  515. .LP
  516. .rs
  517. .sp 27P
  518. .ad r
  519. \fBFigure D\(hy5.5.4, (N), p. 9\fR 
  520. .sp 1P
  521. .RT
  522. .ad b
  523. .RT
  524. .PP
  525. On peut annoter chaque s\*'equence afin de faire appara\* | tre
  526. clairement l'ensemble d'informations \*'echang\*'ees. Chaque ligne est 
  527. accompagn\*'ee 
  528. d'une annotation qui donne les renseignements requis (noms des signaux ou de
  529. proc\*'edures).
  530. .PP
  531. On peut placer un symbole de d\*'ecision dans les colonnes pour indiquer 
  532. que la s\*'equence suivante est valide si la condition indiqu\*'ee est 
  533. vraie. Dans ce cas, le symbole de d\*'ecision appara\* | t g\*'en\*'eralement 
  534. plusieurs fois; il indique les diff\*'erentes s\*'equences produites par 
  535. chacune des valeurs de la 
  536. condition.
  537. .PP
  538. Ce diagramme peut repr\*'esenter la totalit\*'e ou seulement un
  539. sous\(hyensemble significatif des s\*'equences de signaux \*'echang\*'es.
  540. .PP
  541. La repr\*'esentation de l'interaction r\*'eciproque des services r\*'esultant 
  542. de la subdivision d'un processus repr\*'esente une application utile de 
  543. ce type 
  544. de diagramme.
  545. .PP
  546. Les diagrammes de s\*'equencement ne comprennent g\*'en\*'eralement pas 
  547. toutes les s\*'equences possibles; ils constituent souvent un pr\*'ealable 
  548. \*`a la d\*'efinition compl\*`ete. 
  549. .RT
  550. .sp 2P
  551. .LP
  552. D.6
  553.     \fID\*'efinition des donn\*'ees en LDS\fR 
  554. .sp 1P
  555. .RT
  556. .sp 1P
  557. .LP
  558. D.6.1
  559.     \fIDirectives applicables aux\fR 
  560. \fIdonn\*'ees en LDS\fR 
  561. .sp 9p
  562. .RT
  563. .PP
  564. On trouvera dans la pr\*'esente section des renseignements
  565. compl\*'ementaires sur les concepts d\*'efinis au \(sc\ 5 de la Recommandation 
  566. concernant le LDS. La principale diff\*'erence entre la pr\*'esente section 
  567. et l'ancienne 
  568. Recommandation\ Z.104 est que cette derni\*`ere a fait l'objet d'une r\*'evision 
  569. \*`a des fins de clarification et d'harmonisation avec l'ISO. Certains 
  570. des mots 
  571. cl\*'es ont \*'et\*'e modifi\*'es et des adjonctions ont \*'et\*'e faites 
  572. mais la coh\*'erence de 
  573. la s\*'emantique a \*'et\*'e assur\*'ee avec le Livre rouge. L'emploi des 
  574. donn\*'ees d\*'ecrites aux \(sc\ 2, 3 et\ 4 de la nouvelle Recommandation 
  575. (auparavant\ Z.101\(hyZ.103) est 
  576. rest\*'e tel quel.
  577. .bp
  578. .RT
  579. .sp 1P
  580. .LP
  581. D.6.1.1
  582.     \fIIntroduction g\*'en\*'erale\fR 
  583. .sp 9p
  584. .RT
  585. .PP
  586. Les types de donn\*'ees du LDS sont fond\*'es sur l'approche de <<types
  587. de donn\*'ees abstraits>>: on ne d\*'ecrit pas la mani\*`ere dont un type 
  588. doit \* | tre mis en oeuvre, mais on se borne \*`a dire quel sera le r\*'esultat 
  589. des op\*'erateurs 
  590. appliqu\*'e aux valeurs.
  591. .PP
  592. Lorsque l'on d\*'efinit des donn\*'ees abstraites, chaque segment de la
  593. d\*'efinition, appel\*'ee <<d\*'efinition de type partielle>> est introduit 
  594. par le mot\(hycl\*'e NEWTYPE. Chaque d\*'efinition de type partielle a 
  595. une incidence sur les autres, de sorte que toutes les d\*'efinitions de 
  596. type partielles au niveau du syst\*`eme 
  597. constituent une d\*'efinition de type de donn\*'ees unique. Si plusieurs 
  598. d\*'efinitions de type partielles sont introduites \*`a un niveau inf\*'erieur 
  599. (niveau de bloc, par exemple), leur ensemble constitue, avec les d\*'efinitions 
  600. de niveau sup\*'erieur, 
  601. une d\*'efinition de type de donn\*'ees. Cela signifie qu'en un point quelconque 
  602. de la sp\*'ecification, il n'existe qu'\fIune seule\fR d\*'efinition de type de
  603. donn\*'ees.
  604. .PP
  605. En substance, la d\*'efinition de type de donn\*'ees comprend trois
  606. parties:
  607. .RT
  608. .LP
  609.     a)
  610.     d\*'efinitions de sortes;
  611. .LP
  612.     b)
  613.     d\*'efinitions d'op\*'erateurs;
  614. .LP
  615.     c)
  616.     \*'equations.
  617. .PP
  618. Chacune de ces parties fait l'objet d'explications dans les
  619. paragraphes qui suivent. La d\*'efinition de type de donn\*'ees est structur\*'ee 
  620. en 
  621. d\*'efinitions de type de donn\*'ees partielles, chacune introduisant une 
  622. sorte. Les d\*'efinitions d'op\*'erateurs et les \*'equations recouvrent 
  623. les d\*'efinitions de type de donn\*'ees partielles. 
  624. .sp 1P
  625. .LP
  626. D.6.1.2
  627.     \fISortes\fR 
  628. .sp 9p
  629. .RT
  630. .PP
  631. Une sorte est un ensemble de valeurs qui peut avoir un nombre fini ou infini 
  632. d'\*'el\*'ements mais ne peut \* | tre vide. 
  633. .RT
  634. .sp 1P
  635. .LP
  636.     \fIExemples:\fR 
  637. .sp 9p
  638. .RT
  639. .LP
  640.     a)
  641.     l'ensemble de valeurs de la sorte bool\*'eenne est { rue
  642. (vrai), False (faux } 
  643. .LP
  644.     b)
  645.     l'ensemble de valeurs de la sorte Natural (naturel) est
  646. l'ensemble infini des nombres naturesls { ,\ 1, 2,\ . | \ } 
  647. .LP
  648.     c)
  649.     l'ensemble de valeurs de la sorte Couleur
  650. \(ulprimaire est
  651. { ert, Rouge, Ble } 
  652. .PP
  653. Tous les \*'el\*'ements d'une sorte ne doivent pas \* | tre directement
  654. fournis par l'utilisateur (cela exigerait un temps infini dans le cas des
  655. nombres naturels), mais le nom de la sorte doit \* | tre indiqu\*'e. Dans 
  656. la syntaxe concr\*`ete, le mot\(hycl\*'e NEWTYPE est directement suivi 
  657. par le nom de la sorte 
  658. (certaines autres possibilit\*'es seront indiqu\*'ees plus loin). Ce nom 
  659. est surtout utilis\*'e dans les d\*'efinitions d'op\*'erateurs, comme expliqu\*'e 
  660. au \(sc\ D.6.1.3, et dans les d\*'eclarations de variables. 
  661. .sp 1P
  662. .LP
  663. D.6.1.3
  664.     \fIOp\*'erateurs, litt\*'eraux et termes\fR 
  665. .sp 9p
  666. .RT
  667. .PP
  668. Les valeurs d'une sorte peuvent \* | tre d\*'efinies de trois
  669. mani\*`eres:
  670. .RT
  671. .LP
  672.     a)
  673.     par une \*'enum\*'eration: les valeurs sont d\*'efinies dans la
  674. section des litt\*'eraux;
  675. .LP
  676.     b)
  677.     par des op\*'erateurs: les valeurs sont donn\*'ees comme les
  678. r\*'esultats d'<<applications>> d'op\*'erateurs;
  679. .LP
  680.     c)
  681.     par une combinaison d'\*'enum\*'erations et d'op\*'erateurs.
  682. .PP
  683. La combinaison de litt\*'eraux et d'op\*'erateurs donne des termes.
  684. Les relations entre les termes sont exprim\*'ees \*`a l'aide d'\*'equations. 
  685. Les 
  686. paragraphes qui suivent traitent des litt\*'eraux, des op\*'erateurs et 
  687. des termes; le \(sc\ D.6.1.4 traite des \*'equations. 
  688. .sp 1P
  689. .LP
  690. D.6.1.3.1\ \ \fILitt\*'eraux\fR 
  691. .sp 9p
  692. .RT
  693. .PP
  694. Les litt\*'eraux sont des valeurs \*'enum\*'er\*'ees d'une sorte. Une
  695. d\*'efinition de type partiel ne doit pas n\*'ecessairement comporter de 
  696. litt\*'eraux: tous les \*'el\*'ements de la sorte peuvent \* | tre d\*'efinis 
  697. au moyen d'op\*'erateurs. 
  698. Les litt\*'eraux peuvent \* | tre consid\*'er\*'es comme des op\*'erateurs 
  699. d\*'epourvus 
  700. d'arguments. Une relation entre les litt\*'eraux peut \* | tre exprim\*'ee 
  701. dans des 
  702. \*'equations. Dans la syntaxe concr\*`ete, les litt\*'eraux sont introduits 
  703. apr\*`es le mot\(hycl\*'e LITERALS. 
  704. .RT
  705. .sp 1P
  706. .LP
  707.     \fIExemples:\fR 
  708. .sp 9p
  709. .RT
  710. .LP
  711.     a)
  712.      La d\*'efinition de la sorte bool\*'eenne contient deux litt\*'eraux, 
  713. \*`a savoir True (vrai) et False (faux). Ainsi, la d\*'efinition du type 
  714. bool\*'een se pr\*'esente comme suit: 
  715. .LP
  716.     NEWTYPE Boolean
  717. .LP
  718.     \ \ LITERALS True, False
  719. .LP
  720.     \ \ . |  | 
  721. .LP
  722.     ENDNEWTYPE Boolean;
  723. .bp
  724. .LP
  725.     b)
  726.     la sorte naturelle peut \* | tre d\*'efinie \*`a l'aide d'un
  727. litt\*'eral, le z\*'ero. Les autres valeurs peuvent \* | tre g\*'en\*'er\*'ees 
  728. au moyen de ce 
  729. litt\*'eral et d'op\*'erateurs;
  730. .LP
  731.     c)
  732.     les valeurs de la sorte couleur
  733. \(ulprimaire peuvent
  734. \* | tre d\*'efinies de la m\* | me mani\*`ere que les litt\*'eraux bool\*'eens; 
  735. .LP
  736.     NEWTYPE Primary
  737. \(ulcolour
  738. .LP
  739.     \ \ LITERALS Red, Green, Blue
  740. .LP
  741.     \ \ . |  | 
  742. .LP
  743.     ENDNEWTYPE Primary
  744. \(ulcolour;
  745. .LP
  746.     d)
  747.     au \(sc D.6.1.3.2, le troisi\*`eme exemple\ c) pr\*'esente une
  748. d\*'efinition de type partielle sans litt\*'eraux.
  749. .sp 1P
  750. .LP
  751. D.6.1.3.2\ \ \fIOp\*'erateurs\fR 
  752. .sp 9p
  753. .RT
  754. .PP
  755. Un op\*'erateur est une fonction math\*'ematique qui met en concordance 
  756. une ou plusieurs valeurs (\*'eventuellement de sortes diff\*'erentes) avec 
  757. une valeur r\*'esultante. Les op\*'erateurs sont introduits apr\*`es le 
  758. mot\(hycl\*'e OPERATORS, la ou les sortes de leur ou leurs arguments et 
  759. la sorte de r\*'esultat sont \*'egalement 
  760. indiqu\*'ees (on parle de signature des op\*'erateurs).
  761. .RT
  762. .sp 1P
  763. .LP
  764.     \fIExemples:\fR 
  765. .sp 9p
  766. .RT
  767. .LP
  768.     a)
  769.      dans le type bool\*'een, un op\*'erateur appel\*'e <<not>> peut \* | tre 
  770. d\*'efini; il aura un argument de sorte bool\*'een et \*'egalement un r\*'esultat 
  771. de sorte bool\*'een. Dans la d\*'efinition du type bool\*'een, il se pr\*'esente 
  772. comme suit: 
  773. .LP
  774.     NEWTYPE Boolean
  775. .LP
  776.     \ \ LITERALS True, False
  777. .LP
  778.     \ \ OPERATORS <<Not>>: Boolean\(hy>Boolean;
  779. .LP
  780.     \ \ . |  | 
  781. .LP
  782.     ENDNEWTYPE Boolean;
  783. .LP
  784.     b)
  785.     l'op\*'erateur susmentionnn\*'e n\*'ecessaire pour construire tous
  786. les nombres naturels est Next. Cet op\*'erateur prend un argument de sorte
  787. naturelle et donne une valeur naturelle (la valeur sup\*'erieure suivante) 
  788. en tant que r\*'esultat; 
  789. .LP
  790.     c)
  791.      il est possible de d\*'efinir pour des couleurs un nouveau type qui n'a 
  792. pas de litt\*'eraux mais utilise des litt\*'eraux de la sorte couleur 
  793. primaire et certains op\*'erateurs:
  794. .LP
  795.     NEWTYPE Color
  796. .LP
  797.     \ \ OPERATORS
  798. .LP
  799.     \ \ \ \ Take: Primary
  800. \(ulcolour\(hy>Colour;
  801. .LP
  802.     \ \ \ \ Mix: Primary
  803. \(ulcolour, Colour\(hy>Colour;
  804. .LP
  805.     \ \ \ . |  | 
  806. .LP
  807.     ENDNEWTYPE Colour;
  808. .PP
  809. Il s'agissait de prendre une couleur primaire et de la consid\*'erer comme 
  810. une couleur puis de commencer \*`a m\*'elanger plusieurs couleurs primaires 
  811. afin d'obtenir d'autres couleurs.
  812. .sp 1P
  813. .LP
  814. D.6.1.3.3\ \ 
  815. \fITermes\fR 
  816. .sp 9p
  817. .RT
  818. .PP
  819. A l'aide de litt\*'eraux et d'op\*'erateurs, il est possible de
  820. construire comme suit l'ensemble des termes:
  821. .RT
  822. .LP
  823.     1)
  824.      Rassembler tous les litt\*'eraux dans un ensemble de la sorte dans laquelle 
  825. ils sont d\*'efinis \(em\ chaque litt\*'eral est un terme. 
  826. .LP
  827.     2)
  828.      Un nouvel ensemble de termes est cr\*'e\*'e pour chaque op\*'erateur 
  829. lorsque l'op\*'erateur est appliqu\*'e \*`a toutes les combinaisons possibles 
  830. de termes de la sorte correcte cr\*'e\*'es pr\*'ec\*'edemment: 
  831. .LP
  832.     a)
  833.      pour la sorte <<Boolean>>, l'ensemble de litt\*'eraux est { rue (vrai), 
  834. False (faux }  Le r\*'esultat de cette \*'etape est { ot (True), Not 
  835. (False } parce que nous avons seulement l'op\*'erateur Not (non);
  836. .LP
  837.     b)
  838.     pour la sorte <<Natural>>, le r\*'esultat de cette \*'etape
  839. est { ext(0 } 
  840. .LP
  841.     c)
  842.     pour la sorte <<Colour>> l'ensemble de litt\*'eraux est
  843. vide mais le r\*'esultat de cette \*'etape est { ake(Red), Take(green),
  844. Take(Blue } 
  845. .LP
  846.     3)
  847.     Les termes des ensembles cr\*'e\*'es au cours de l'\*'etape
  848. pr\*'ec\*'edente sont tous la sorte du r\*'esultat de l'op\*'erateur appliqu\*'e; 
  849. par exemple, tous les r\*'esultats de l'op\*'erateur Not sont de la sorte 
  850. bool\*'eenne. Alors, on 
  851. r\*'eunit tous les ensembles de la m\* | me sorte, aussi bien des ensemble 
  852. initiaux que les ensembles nouvellement cr\*'e\*'es: 
  853. .LP
  854.     a)
  855.      pour la sorte bool\*'eenne, on obtient l'ensemble { rue, False, Not(True), 
  856. Not(False }  
  857. .LP
  858.     b)
  859.     pour les nombres naturels cette \*'etape donne l'ensemble { ,\ Next(0 } 
  860. .bp
  861. .LP
  862.     4)
  863.     Les deux derni\*`eres \*'etapes sont r\*'ep\*'et\*'ees \*`a maintes
  864. reprises, et d\*'efinissent en g\*'en\*'eral un ensemble infini de termes:
  865. .LP
  866.     a)
  867.     l'ensemble de termes bool\*'eens g\*'en\*'er\*'es par les
  868. litt\*'eraux True et False et l'op\*'erateur Not est { rue, False, Not(True),
  869. Not(False), Not(Not(True)), Not(Not(False)), Not(Not(Not(True))),\ . |  | }
  870. .LP
  871.     b)
  872.     l'ensemble des termes naturels g\*'en\*'er\*'es par le
  873. litt\*'eral\ 0 et l'op\*'erateur Next est { ,\ Next(0), Next(Next(0)),
  874. Next(Next(Next(0))),\ . |  | } 
  875. .LP
  876.     c)
  877.     l'ensemble des termes de couleur g\*'en\*'er\*'es par les
  878. litt\*'eraux Red, Green et Blue de la sorte Primary
  879. \(ulcolour et les op\*'erateurs
  880. Take et Mix est { ake(Red), Take(Green), Take(Blue), Mix(Red, Take(Red)),
  881. Mix(Red, Take(Green)), Mix(Red, Take(Blue)), Mix(Green, Take(Red)), Mix(Green, 
  882. Take(Green)), Mix(Green, Take(Blue)), Mix(Blue, Take(Red)), Mix(Blue, 
  883. Take(Green)), Mix(Blue, Take(Blue)),\ . |  | } 
  884. .sp 1P
  885. .LP
  886. D.6.1.4
  887.     \fIEquations et axiomes\fR 
  888. .sp 9p
  889. .RT
  890. .PP
  891. D'une mani\*`ere g\*'en\*'erale, le nombre de termes g\*'en\*'er\*'es au 
  892. paragraphe pr\*'ec\*'edent est sup\*'erieur au nombre de valeurs de la 
  893. sorte. A titre d'exemple, 
  894. il existe deux valeurs bool\*'eennes mais l'ensemble de termes bool\*'eens a un
  895. nombre infini d'\*'el\*'ements. Il existe cependant une possibilit\*'e 
  896. d'\*'etablir des 
  897. r\*`egles sp\*'ecifiant quels sont les termes consid\*'er\*'es comme d\*'esignant 
  898. la m\* | me 
  899. valeur. Ces r\*`egles sont appel\*'ees \*'equations et font l'objet du 
  900. paragraphe 
  901. suivant. Deux types particuliers d'\*'equations, les axiomes et les \*'equations 
  902. conditionnelles, font l'objet des \(sc\ D.6.1.4.2 et\ D.6.1.4.3.
  903. .PP
  904. Les \*'equations, les axiomes et les \*'equations conditionnelles sont
  905. donn\*'es, dans la syntaxe concr\*`ete apr\*`es le mot\(hycl\*'e AXIOMS. 
  906. Ce mot\(hycl\*'e a \*'et\*'e 
  907. conserv\*'e pour des raisons d'ordre historique.
  908. .RT
  909. .sp 1P
  910. .LP
  911. D.6.1.4.1\ \ \fIEquations\fR 
  912. .sp 9p
  913. .RT
  914. .PP
  915. Une \*'equation indique quels sont les termes consid\*'er\*'es comme
  916. d\*'esignant la m\* | me valeur. Une \*'equation relie deux termes s\*'epar\*'es 
  917. par le 
  918. symbole d'\*'equivalence\ ==.
  919. .PP
  920. Par exemple <<Not(True)\ ==\ False>> indique que les termes Not(True)
  921. et False sont \*'equivalents; chaque fois que l'on trouve Not(True), on peut le
  922. remplacer par False sans changement de sens et vice versa.
  923. .PP
  924. Dans certaines \*'equations, l'ensemble de termes est divis\*'e en
  925. sous\(hyensembles discontinus de termes qui d\*'esignent la m\* | me valeur. 
  926. Ces 
  927. sous\(hyensembles sont appel\*'es classes d'\*'equivalence. Dans le langage 
  928. courant, les classes d'\*'equivalence sont identifi\*'ees aux valeurs. 
  929. .RT
  930. .sp 1P
  931. .LP
  932.     \fIExemples:\fR 
  933. .sp 9p
  934. .RT
  935. .LP
  936.     a)
  937.     L'ensemble de termes de la sorte bool\*'eenne est divis\*'e en
  938. deux classes d'\*'equivalence de termes par les deux axiomes suivants:
  939. .LP
  940.     Not(True)
  941.     ==\ False;
  942. .LP
  943.     Not(False)
  944.     ==\ True;
  945. .LP
  946.     Les classes d'\*'equivalence qui en r\*'esultent sont:
  947. .LP
  948.     { rue, Not(False), Not(Not(True)), Not(Not(Not(False))),
  949. .LP
  950. Not(Not(Not(Not(True)))), Not(Not(Not(Not(Not(False))))),\ . |  | }
  951. .LP
  952.     et
  953. .LP
  954.     { alse, Not(True), Not(Not(False)), Not(Not(Not(True))),
  955. .LP
  956. Not(Not(Not(Not(False)))), Not(Not(Not(Not(Not(True))))) }  . |  | 
  957. .LP
  958.     Ces deux classes d'\*'equivalence sont identifi\*'ees aux valeurs
  959. True (Vrai) et False (Faux);
  960. .LP
  961.     b)
  962.     Dans le cas de couleurs, on peut d\*'esirer sp\*'ecifier que le
  963. m\*'elange d'une couleur primaire avec une couleur qui contient cette couleur
  964. primaire ne fait pas de diff\*'erence. De plus, l'ordre dans lequel les 
  965. primaires sont m\*'elang\*'es est sans importance. Cela peut \* | tre \*'enonc\*'e 
  966. dans les \*'equations 
  967. suivantes:
  968. .LP
  969.     Mix(Red, Take(Red))
  970.     ==\ Take(Red);
  971. .LP
  972.     Mix(Red, Mix(Red, Take(Green)))
  973.     ==\ Mix(Red, Take(Green));
  974. .LP
  975.     Mix(Red, Mix(Red, Take(Blue)))
  976.     ==\ Mix(Red Take(Blue));
  977. .LP
  978.     Mix(Red, Mix(Green, Take(Red)))
  979.     ==\ Mix(Green, Take(Red));
  980. .LP
  981.     Mix(Red, Mix(Blue, Take(Red)))
  982.     ==\ Mix(Blue,
  983. Take(Red));\ etc.
  984. .bp
  985. .LP
  986.      Cela demande beaucoup de travail car des \*'equations similaires apparaissent 
  987. pour toutes les permutations de Red, Green et Blue. C'est 
  988. pourquoi le LDS comporte la construction FOR\(hyALL qui introduit les noms de
  989. valeur repr\*'esentant une classe d'\*'equivalence arbitraire (ou la valeur 
  990. associ\*'ee \*`a cette classe d'\*'equivalence). Cela peut \* | tre tr\*`es 
  991. utile dans la situation ci\(hydessus; toutes les \*'equations susmentionn\*'ees 
  992. et celles qui sont indiqu\*'ees 
  993. par\ etc. peuvent \* | tre d\*'ecrites en quelques lignes sous la forme
  994. suivante:
  995. .LP
  996.     FOR ALL p1, p2 IN Primary
  997. \(ulcolour
  998. .LP
  999.     /*1*/\ \ \ Mix(p1, Take(p1))\ ==\ Take(p1);
  1000. .LP
  1001.     /*2*/\ \ \ Mix(p1, Mix(p1, Take(p2)))\ ==\ Mix(p1, Take(p2));
  1002. .LP
  1003.     /*3*/\ \ \ Mix(p1, Mix(p2, Take(p1)))\ ==\ Mix(p2, Take(p1));
  1004. .LP
  1005.     /*4*/\ \ \ Mix(p1, Take(p2))\ ==\ Mix(p2, Take(p1));
  1006. .LP
  1007.     /*4*/\ \ \ 
  1008. FOR ALL c IN Colour
  1009. .LP
  1010.     /*5*/\ \ \ (\ Mix(p1, Mix(p2, c))\ ==\ Mix(p2, Mix(p1, c));
  1011. .LP
  1012.     /*6*/\ \ \ 
  1013. (\ 
  1014. Mix(p1, Mix(p2, c))\ ==\ Mix(Mix(p1, Take(p2))\ c))
  1015. .LP
  1016.     /*4*/\ \ \ 
  1017. )
  1018. .LP
  1019.      Dans les \*'equations ci\(hydessus, il y a chevauchement mais cela ne 
  1020. pose pas de probl\*`emes pour autant que les \*'equations ne se contredisent 
  1021. pas mutuellement. 
  1022. .LP
  1023.      Les \*'equations susmentionn\*'ees cr\*'eent 7 classes d'\*'equivalence 
  1024. dans l'ensemble de termes de la sorte Colour, de sorte qu'avec ces \*'equations, 
  1025. il y a sept valeurs de couleurs. Les termes suivants sont dans les classes 
  1026. d'\*'equivalence diff\*'erentes:
  1027. .LP
  1028.     Take(Red), Take(Green), Take(Blue),
  1029. .LP
  1030.     Take(Red, Take(Green)),
  1031. .LP
  1032.     Mix(Green, Take(Blue)),
  1033. .LP
  1034.     Mix(Blue, Take(Red)),
  1035. .LP
  1036.     Mix(Blue, Mix(Green, Take(Red))).
  1037. .LP
  1038.      Tous les autres termes de la sorte Colour sont \*'equivalents \*`a l'un 
  1039. des termes ci\(hydessus. 
  1040. .LP
  1041.     Dans les exemples d'\*'equations comportant la construction
  1042. FOR\(hyALL, appel\*'ees \*'equations explicitement quantifi\*'ees, l'information 
  1043. que p1 et p2 sont des identificateurs de valeur de sorte Primary 
  1044. \(ulcolour est redondante; l'argument de l'op\*'erateur Take et le premier 
  1045. argument de l'op\*'erateur Mix ne 
  1046. peuvent \* | tre de la sorte Primary
  1047. \(ulcolour. En g\*'en\*'eral, les \*'equations
  1048. explicitement quantifi\*'ees deviennent plus lisibles mais il est possible
  1049. d'omettre la quantification si la sorte des identificateurs de valeur peut
  1050. \* | tre d\*'eduite du contexte. Dans ce cas, on dit que l'\*'equation 
  1051. est implicitement quantifi\*'ee. 
  1052. .sp 1P
  1053. .LP
  1054.     \fIExemple:\fR 
  1055. .sp 9p
  1056. .RT
  1057. .LP
  1058.     Les \*'equations 4 et 5 ci\(hydessus sont les m\* | mes que:
  1059. .LP
  1060.     Mix(p1, Take(p2))
  1061. , c))
  1062. \ \ \ ==\ Mix(p2, Take(p1));
  1063. .LP
  1064.     Mix(p1, Mix(p2, c))\ \ \ ==\ Mix(p2, Mix(p1,\ c));
  1065. .sp 1P
  1066. .LP
  1067. D.6.1.4.2\ \ \fIAxiomes\fR 
  1068. .sp 9p
  1069. .RT
  1070. .PP
  1071. Les axiomes sont simplement des esp\*`eces particuli\*`eres
  1072. d'\*'equation, introduites parce que dans des situations pratiques, de 
  1073. nombreuses \*'equations se rapportent \*`a des bool\*'eens. Dans ce cas, 
  1074. les \*'equations tendent \*`a prendre la forme\ . |  | \ ==\ True (vrai), 
  1075. c'est\(hy\*`a\(hydire qu'elles indiquent qu'un terme donn\*'e est \*'equivalent 
  1076. \*`a True. 
  1077. .RT
  1078. .sp 1P
  1079. .LP
  1080.     \fIExemple:\fR 
  1081. .sp 9p
  1082. .RT
  1083. .LP
  1084.     Admettons qu'un op\*'erateur soit d\*'efini pour une couleur type:
  1085. Contains: Colour, Primary
  1086. \(ulcolour\(hy> Boolean; ce qui doit donner la r\*'eponse
  1087. True (vrai) si la couleur primaire est contenue dans la couleur et False 
  1088. (faux) dans le cas contraire. Voici un exemple des \*'equations dont il 
  1089. s'agit: 
  1090. .LP
  1091.     FOR ALL p IN Primary
  1092. \(ulcolour
  1093. .LP
  1094.     (\ Contains(Take(p), p)
  1095.     == True;
  1096. .LP
  1097.     FOR ALL c IN Colour
  1098. .LP
  1099.     (\ Contains(Mix(p,c), p)
  1100.     == True)
  1101. .LP
  1102.     )
  1103. .LP
  1104.     La partie <<== True>> de ces \*'equations peut \* | tre omise et les
  1105. r\*'esultats sont appel\*'es axiomes. Des axiomes peuvent se reconna\* | tre 
  1106. \*`a 
  1107. l'absence du symbole d'\*'equivalence\ ==; ils d\*'esignent des termes qui sont
  1108. \*'equivalents \*`a la valeur True (vrai) de la sorte bool\*'eenne.
  1109. .LP
  1110.      La construction de la seconde \*'equation peut para\* | tre quelque peu 
  1111. forc\*'ee. Une meilleure mani\*`ere d'\*'ecrire ces \*'equations est indiqu\*'ee 
  1112. apr\*`es 
  1113. l'introduction de certaines constructions utiles.
  1114. .bp
  1115. .sp 1P
  1116. .LP
  1117. D.6.1.4.3\ \ 
  1118. \fIEquations conditionnelles\fR 
  1119. .sp 9p
  1120. .RT
  1121. .PP
  1122. Les \*'equations conditionnelles constituent un moyen d'\*'ecrire des
  1123. \*'equations qui ne sont valables que dans certaines conditions. Ces conditions
  1124. sont d\*'esign\*'ees par la m\* | me syntaxe que les \*'equations non conditionnelles 
  1125. et 
  1126. sont s\*'epar\*'ees par un symbole\ ==> de l'\*'equation qui est valable 
  1127. si la condition est remplie. 
  1128. .RT
  1129. .sp 1P
  1130. .LP
  1131.     \fIExemple:\fR 
  1132. .sp 9p
  1133. .RT
  1134. .LP
  1135.      L'exemple type d'une \*'equation conditionnelle est la d\*'efinition 
  1136. de la division en type r\*'eel o\*`u: 
  1137. .LP
  1138.     FOR ALL x, z IN Real
  1139. .LP
  1140.     (\ \ z/= 0 == True\ \ \ \ ==>\ \ \ \ (x/z) * z == x)
  1141. .LP
  1142.      indique que, si la condition <<z n'est pas \*'egale \*`a 0>> est valable, 
  1143. la division par\ z suivie de la multiplication par\ z donne la valeur originale. 
  1144. Cette \*'equation conditionnelle n'indique rien quant \*`a ce qui devrait 
  1145. arriver si une valeur de la sorte Real \*'etait divis\*'ee par\ 0. Si l'on 
  1146. veut sp\*'ecifier ce qui se passe en cas de division par z\*'ero, il faudrait 
  1147. cr\*'eer une \*'equation 
  1148. conditionnelle de la forme suivante:
  1149. .LP
  1150.     FOR ALL x, z IN Real
  1151. .LP
  1152.     (\ \ z = 0 == True\ \ \ \ ==>\ \ \ \ (x/z) * z == . |  | ).
  1153. .LP
  1154.     En pareil cas, cependant, il est recommand\*'e de placer un
  1155. <<terme conditionnel>> du c\* | t\*'e droit, pour faciliter la lecture. 
  1156. Dans le cas 
  1157. ci\(hydessus l'\*'equation deviendrait:
  1158. .LP
  1159.     FOR ALL x, z IN Real
  1160. .LP
  1161.     (\ \ (x/z) * z\ \ \ \ ==\ \ \ IF z/=0
  1162. .LP
  1163.     (\ \ (x/z) * z\ \ \ \ ==\ \ \ 
  1164. THEN x
  1165. .LP
  1166.     (\ \ (x/z) * z\ \ \ \ ==\ \ \ 
  1167. ELSE . |  | 
  1168. .LP
  1169.     (\ \ (x/z) * z\ \ \ \ ==\ \ \ 
  1170. FI
  1171. .LP
  1172.     )
  1173. .sp 1P
  1174. .LP
  1175. D.6.1.5
  1176.      \fIInformations compl\*'ementaires concernant les \*'equations et les\fR 
  1177. \fIaxiomes\fR 
  1178. .sp 9p
  1179. .RT
  1180. .PP
  1181. Les deux sections qui suivent traitent de certaines difficult\*'es
  1182. que l'on peut rencontrer lorsque des op\*'erateurs donnent des r\*'esultats
  1183. appartenant \*`a une sorte d\*'ej\*`a d\*'efinie. Le \(sc\ D.6.1.5.3 explique 
  1184. la notion 
  1185. d'erreur en tant que terme d'une \*'equation.
  1186. .RT
  1187. .sp 1P
  1188. .LP
  1189. D.6.1.5.1\ \ \fICoh\*'erence de la hi\*'erarchie\fR 
  1190. .sp 9p
  1191. .RT
  1192. .PP
  1193. En un point quelconque d'une sp\*'ecification en LDS, il existe une
  1194. seule et unique d\*'efinition de type de donn\*'ees. Cette d\*'efinition 
  1195. de type de 
  1196. donn\*'ees contient les sortes, op\*'erateurs et \*'equations pr\*'ed\*'efinis 
  1197. et l'ensemble des sortes, op\*'erateurs et \*'equations d\*'efinis par 
  1198. l'utilisateur dans les 
  1199. d\*'efinitions de type partielles visibles en ce point. (C'est la raison pour
  1200. laquelle un texte NEWTYPE\ . |  |  ENDNEWTYPE est appel\*'e d\*'efinition 
  1201. de type 
  1202. \fIpartielle\fR .)
  1203. .PP
  1204. Il en r\*'esulte certaines cons\*'equences pour les d\*'efinitions de type 
  1205. aux niveaux inf\*'erieurs. Cette influence sur le type pourrait \* | tre 
  1206. peu souhaitable. A titre d'exemple, on pourrait sp\*'ecifier de fa\*,con 
  1207. erron\*'ee que deux termes sont \*'equivalents, les rendant ainsi \*'equivalents 
  1208. alors qu'ils ne sont pas dans une 
  1209. port\*'ee englobante.
  1210. .PP
  1211. Il n'est pas admis de donner des \*'equations telles que:
  1212. .RT
  1213. .LP
  1214.     a)
  1215.     les valeurs d'une sorte qui sont diff\*'erentes dans une
  1216. port\*'ee \*`a un niveau sup\*'erieur soient rendues \*'equivalentes;
  1217. .LP
  1218.     b)
  1219.     de nouvelles valeurs soient ajout\*'ees \*`a une sorte d\*'efinie
  1220. dans une port\*'ee de niveau sup\*'erieur.
  1221. .PP
  1222. Cela signifie par exemple que, dans un bloc au niveau du
  1223. syst\*`eme, des d\*'efinitions de type partielles sp\*'ecifi\*'ees par 
  1224. l'utilisateur 
  1225. contenant un op\*'erateur ayant un r\*'esultat pr\*'ed\*'efini doivent 
  1226. rapporter tous les termes produits par cet op\*'erateur \*`a des valeurs 
  1227. de cette sorte de r\*'esultat. 
  1228. .sp 1P
  1229. .LP
  1230.     \fIExemples:\fR 
  1231. .sp 9p
  1232. .RT
  1233. .LP
  1234.     a)
  1235.     Si, pour une raison quelconque, on donne l'axiome:
  1236. .LP
  1237.     FOR ALL n, m IN Integer
  1238. .LP
  1239.     (\ (Fact(n) = Fact(m))\ \ \ \ =>\ \ \ \ (n = m))
  1240. .LP
  1241.      afin de sp\*'ecifier que si les r\*'esultats de l'op\*'erateur Fact sont 
  1242. les m\* | mes, les arguments sont alors les m\* | mes. (A noter que\ => 
  1243. est 
  1244. l'implication bool\*'eenne; cela a peu de relation avec le signe d'\*'equation
  1245. conditionnellle\ ==>). Ainsi, par accident, les valeurs sont unifi\*'ees. Des
  1246. \*'equations des exemples pr\*'ec\*'edents on peut d\*'eduire que Fact(0)\ 
  1247. =\ Fact(1) et 
  1248. cette derni\*`ere \*'equation indique que\ 0 et\ 1 sont des notations diff\*'erentes 
  1249. de la m\* | me valeur. Sur la base de cette derni\*`ere \*'equation, on 
  1250. peut prouver 
  1251. que les nombres d'\*'el\*'ements de la sorte Integer sont r\*'eduits \*`a
  1252. un.
  1253. .bp
  1254. .LP
  1255.      Avec l'aide d'une \*'equation conditionnelle, on peut indiquer que, pourvu 
  1256. que\ n et\ m ne soient pas \*'egaux \*`a\ 0, le m\* | me r\*'esultat de 
  1257. l'op\*'erateur Fact sur\ n et\ m implique n\ =\ m. En Led:
  1258. .LP
  1259.     FOR ALL n, m IN Integer
  1260. .LP
  1261.     (\ n/=0, m/=0 ==> (Fact(n) = Fact(m))\ \ \ \ =>\ \ \ \ (n = m))
  1262. .LP
  1263.     A noter que cette derni\*`ere \*'equation n'ajoute rien \*`a la
  1264. s\*'emantique des nombres entiers; c'est un th\*'eor\*`eme qui peut \* | tre 
  1265. d\*'eduit des 
  1266. autres \*'equations. Par ailleurs, l'adjonction d'une \*'equation prouvable ne
  1267. pr\*'esente pas d'inconv\*'enient.
  1268. .LP
  1269.     b)
  1270.      Admettons que l'on d\*'ecouvre la n\*'ecessit\*'e d'un op\*'erateur pour 
  1271. les factorielles lors de la sp\*'ecification d'un type donn\*'e. Dans la 
  1272. d\*'efinition de type partielle de ce type, l'op\*'erateur Fact est introduit: 
  1273. .LP
  1274.     Fact:\ Integer \(hy> Integer;
  1275. .LP
  1276.     et les \*'equations suivantes sont donn\*'ees pour d\*'efinir cet
  1277. op\*'erateur:
  1278. .LP
  1279.     Fact(0) == 1;
  1280. .LP
  1281.     FOR ALL n IN Integer
  1282. .LP
  1283.     (\ n > 0 ==> Fact(n) == n * Fact(n\(em1))
  1284. .LP
  1285.      Ces \*'equations ne d\*'efinissent pas Fact(\(em1) et ainsi, c'est un 
  1286. terme de la sorte Integer qui n'a pas de relation avec d'autres termes 
  1287. de cette sorte. En cons\*'equence, Fact(\(em1) est une nouvelle valeur 
  1288. de la sorte entier 
  1289. (et il en va de m\* | me pour Fact(\(em2), Fact(\(em3),\ etc). Cela n'est 
  1290. pas admis. 
  1291. L'exemple\ b) du \(sc\ D.6.1.5.3 donne une d\*'efinition correcte de fact.
  1292. .sp 1P
  1293. .LP
  1294. D.6.1.5.2\ \ 
  1295. \fIEgalit\*'e et in\*'egalit\*'e\fR 
  1296. .sp 9p
  1297. .RT
  1298. .PP
  1299. Dans chaque type, les op\*'erateurs d'\*'egalit\*'e et d'in\*'egalit\*'e sont
  1300. implicites. Ainsi, si une d\*'efinition de type partielle introduit une 
  1301. sorte\ S, il y a alors des d\*'efinitions implicites d'op\*'erateur: 
  1302. .RT
  1303. .LP
  1304.     "=": S, S \(hy> Boolean;
  1305. .LP
  1306.     "/=": S, S \(hy> Boolean;
  1307. .PP
  1308. (\fIRemarque\fR \ \(em\ 
  1309. Les guillemets sp\*'ecifient que = et/= sont utilis\*'es comme op\*'erateurs 
  1310. infixes.) 
  1311. .PP
  1312. L'op\*'erateur d'\*'egalit\*'e pr\*'esente les propri\*'et\*'es pr\*'evisibles:
  1313. .PP
  1314. a = a,
  1315. .PP
  1316. a = b => b = a,
  1317. .PP
  1318. a = b AND b = c => a = c,
  1319. .PP
  1320. a = b => a == b,
  1321. .PP
  1322. a = b => op(a) = op(b) for all operators op.
  1323. .PP
  1324. Ces propri\*'et\*'es ne sont pas \*'ecrites en syntaxe LDS et ne doivent pas
  1325. \* | tre \*'enonc\*'ees dans des axiomes ou des \*'equations car elles 
  1326. sont implicites. 
  1327. La valeur bool\*'eenne obtenue lorsque cet op\*'erateur est appliqu\*'e 
  1328. est True (vrai) si les termes de la partie gauche et de la partie droite 
  1329. sont de m\* | me classe d'\*'equivalence; sinon la valeur obtenue est False 
  1330. (faux). S'il n'est pas 
  1331. explicitement sp\*'ecifi\*'e, que la valeur est True (vrai) ou False (faux), la
  1332. sp\*'ecification est incompl\*`ete.
  1333. .PP
  1334. Pour l'op\*'erateur d'in\*'egalit\*'e, c'est par une \*'equation en LDS 
  1335. que l'on peut le mieux expliquer la s\*'emantique: 
  1336. .RT
  1337. .LP
  1338.     FOR ALL a, b IN S
  1339. .LP
  1340.     (\ a/= b == Not(a = b))
  1341. .PP
  1342. Il n'y a pas de diff\*'erence entre l'\*'egalit\*'e et l'\*'equivalence. 
  1343. Deux termes qui sont \*'equivalents d\*'esignent la m\* | me valeur et 
  1344. l'op\*'erateur d'\*'egalit\*'e entre eux donne le r\*'esultat True (vrai). 
  1345. .sp 1P
  1346. .LP
  1347. D.6.1.5.3\ \ 
  1348. \fIErreur\fR 
  1349. .sp 9p
  1350. .RT
  1351. .PP
  1352. On a jug\*'e n\*'ecessaire, pour les exemples qui pr\*'ec\*`edent, de
  1353. sp\*'ecifier que l'application de l'op\*'erateur \*`a certaines valeurs 
  1354. est consid\*'er\*'ee comme une erreur. Le LDS a un moyen de le sp\*'ecifier 
  1355. formellement: l'\*'el\*'ement 
  1356. ERROR. L'erreur devrait servir \*`a exprimer:
  1357. .RT
  1358. .LP
  1359.      <<l'application de cet op\*'erateur \*`a cette valeur n'est pas admise 
  1360. et lorsqu'il se pr\*'esente, le comportement futur est ind\*'efini>>. 
  1361. .PP
  1362. Dans la syntaxe concr\*`ete, cela est indiqu\*'e par le terme Error!, qui 
  1363. ne peut \* | tre utilis\*'e comme argument d'un op\*'erateur. 
  1364. .bp
  1365. .PP
  1366. Lorsque Error r\*'esulte de l'application d'un op\*'erateur et que cette
  1367. application est un argument d'un autre op\*'erateur, l'application d'op\*'erateur 
  1368. ext\*'erieur porte \*'egalement Error dans son r\*'esultat (propagation\(hyd'erreurs). 
  1369. Dans un terme conditionnel, la partie THEN \fIou\fR la partie ELSE est 
  1370. \*'evalu\*'ee, 
  1371. de sorte que l'une d'elle peut \* | tre une erreur sans que celle\(hyci 
  1372. soit \*'evalu\*'ee (\*'etant donn\*'ee que l'autre partie de l'alternative 
  1373. est \*'evalu\*'ee). 
  1374. .RT
  1375. .sp 1P
  1376. .LP
  1377.     \fIExemples:\fR 
  1378. .sp 9p
  1379. .RT
  1380. .LP
  1381.     a)
  1382.     Dans l'exemple de division de valeurs de sorte Real, les
  1383. poids peuvent \* | tre remplac\*'es comme suit:
  1384. .LP
  1385.     FOR ALL x, z IN Real
  1386. .LP
  1387.     (\ (x/z) * z\ ==\ IF z/=0
  1388. .LP
  1389.     (\ (x/z) * z\ ==\ 
  1390. THEN \ \ \ x
  1391. .LP
  1392.     (\ (x/z) * z\ ==\ 
  1393. ELSE \ \ \ Error!
  1394. .LP
  1395.     (\ (x/z) * z\ ==\ 
  1396. FI
  1397. .LP
  1398.     )
  1399. .LP
  1400.     Pour plus de clart\*'e, on pourrait ajouter:
  1401. .LP
  1402.     FOR ALL x IN Real
  1403. .LP
  1404.     (\ x/0 == Error!)
  1405. .LP
  1406.     b)
  1407.     Dans l'exemple comportant l'op\*'erateur Fact, on pourrait
  1408. sp\*'ecifier que l'application de cet op\*'erateur sur des entiers n\*'egatifs 
  1409. est 
  1410. consid\*'er\*'ee comme une erreur (Error). Cela permet d'\*'eviter que 
  1411. Fact(\(em1), 
  1412. Fact(\(em2),\ . |  |  ne deviennent de nouvelles valeurs de la sorte Integer
  1413. (entier). Il conviendrait de d\*'efinir l'op\*'erateur Fact comme suit:
  1414. .LP
  1415.     n < 0
  1416.     ==>
  1417.     Fact(n) == Error!;
  1418. .LP
  1419.     Fact(0) == 1;
  1420. .LP
  1421.     n > 0
  1422.     ==>
  1423.     Fact(n) == Fact(n\(em1) * n;
  1424. .LP
  1425.      Ces trois lignes sont beaucoup plus claires que l'\*'equation du style 
  1426. programmation indiqu\*'ee ci\(hyapr\*`es. En g\*'en\*'eral, le terme conditionnel 
  1427. devrait \* | tre utilis\*'e s'il y a deux cas compl\*'ementaires; l'embo\* | tage 
  1428. de termes conditionnels rend l'\*'equation illisible, comme on peut le 
  1429. voir 
  1430. ci\(hydessous:
  1431. .LP
  1432.     Fact(n)\ \ \ ==\ \ \ IF n > 0
  1433. .LP
  1434.     Fact(n)\ \ \ ==\ \ \ 
  1435. THEN Fact(n\(em1) * n
  1436. .LP
  1437.     Fact(n)\ \ \ ==\ \ \ 
  1438. ELSE\ \ IF n = 0
  1439. .LP
  1440.     Fact(n)\ \ \ ==\ \ \ ELSE\ \ 
  1441. THEN 1
  1442. .LP
  1443.     Fact(n)\ \ \ ==\ \ \ ELSE\ \ 
  1444. ELSE Error!
  1445. .LP
  1446.     Fact(n)\ \ \ ==\ \ \ ELSE\ \ 
  1447. FI
  1448. .LP
  1449.     Fact(n)\ \ \ ==\ \ \ 
  1450. FI
  1451. .sp 1P
  1452. .LP
  1453. D.6.2
  1454.     \fIG\*'en\*'erateurs et h\*'eritage\fR 
  1455. .sp 9p
  1456. .RT
  1457. .PP
  1458. Le pr\*'esent paragraphe traite de deux constructions qui peuvent
  1459. \* | tre utilis\*'ees pour sp\*'ecifier des types ayant des parties communes. 
  1460. Le 
  1461. g\*'en\*'erateur sp\*'ecifie non un type mais un sch\*'ema, qui devient 
  1462. un type lorsque les sortes, op\*'erateurs, litt\*'eraux et constantes formels 
  1463. sont remplac\*'es par des 
  1464. termes r\*'eels.
  1465. .PP
  1466. L'h\*'eritage offre la possibilit\*'e de cr\*'eer un nouveau type en partant
  1467. d'un type d\*'ej\*`a existant. Les noms de litt\*'eraux et d'op\*'erateurs 
  1468. peuvent \* | tre renomm\*'es et il est possible de sp\*'ecifier des litt\*'eraux, 
  1469. des op\*'erateurs et des \*'equations suppl\*'ementaires. 
  1470. .RT
  1471. .sp 1P
  1472. .LP
  1473. D.6.2.1
  1474.     \fIG\*'en\*'erateurs\fR 
  1475. .sp 9p
  1476. .RT
  1477. .PP
  1478. Une d\*'efinition de g\*'en\*'erateur d\*'efinit un sch\*'ema param\*'etr\*'e 
  1479. par des 
  1480. noms formels de sortes, de litt\*'eraux, de constantes et d'op\*'erateurs. Les
  1481. g\*'en\*'erateurs sont destin\*'es \*`a des types qui repr\*'esentent des 
  1482. <<variations sur un th\*`eme>>, tels que des ensembles d'\*'el\*'ements, 
  1483. des cha\* | nes d'\*'el\*'ements, des 
  1484. fichiers d'enregistrement, des tables de consultation, des tableaux.
  1485. .PP
  1486. On peut l'expliquer \*`a l'aide d'un exemple pour lequel des variations 
  1487. peuvent \* | tre envisag\*'ees. Admettons qu'il soit n\*'ecessaire qu'un 
  1488. type ressemble \*`a la notion math\*'ematique d'un ensemble d'entiers. 
  1489. La partie suivante du texte fait partie de la d\*'efinition de type de 
  1490. cet ensemble 
  1491. d'entiers.
  1492. .bp
  1493. .RT
  1494. .LP
  1495. .rs
  1496. .sp 24P
  1497. .ad r
  1498. \fBFigure D.6.2.1 (comme tableau) [T37.100], p. 10\fR 
  1499. .sp 1P
  1500. .RT
  1501. .ad b
  1502. .RT
  1503. .LP
  1504. .sp 6
  1505. .PP
  1506. Toutes les \*'equations ont une quantification implicite. La
  1507. premi\*`ere \*'equation indique que la suppression d'un \*'el\*'ement de 
  1508. l'ensemble vide donne 
  1509. l'ensemble vide pour r\*'esultat. La seconde \*'equation indique que la 
  1510. suppression apr\*`es insertion du m\* | me \*'el\*'ement donne pour r\*'esultat 
  1511. l'ensemble tel qu'il 
  1512. \*'etait avant l'insertion (\*`a condition que l'ensemble ne contienne pas
  1513. l'\*'el\*'ement); sinon l'ordre d'insertion et de suppression peut \* | tre
  1514. interchangeable. La troisi\*`eme \*'equation indique que l'\*'el\*'ement 
  1515. vide ne contient pas d'\*'el\*'ements. La quatri\*`eme \*'equation indique 
  1516. qu'un \*'el\*'ement se trouve dans un ensemble s'il est le dernier \*'el\*'ement 
  1517. ajout\*'e ou s'il se trouvait dans l'ensemble avant l'adjonction du dernier 
  1518. \*'el\*'ement. La derni\*`ere \*'equation indique que 
  1519. l'ordre d'addition des \*'el\*'ements ne fait aucune diff\*'erence.
  1520. .PP
  1521. Dans l'exemple de la figure D\(hy6.2.1 Int
  1522. \(ulset (ensemble
  1523. \(uld'entiers) n'est qu'un exemple d'un ensemble et si l'on a \*'egalement 
  1524. besoin d'un 
  1525. PId
  1526. \(ulset, d'un Subscriber
  1527. \(ulset (ensemble
  1528. \(uld'abonn\*'es) et d'un
  1529. Exchange
  1530. \(ulname
  1531. \(ulset (ensemble
  1532. \(ulde
  1533. \(ulnoms
  1534. \(ulde
  1535. \(ulcentral) dans la
  1536. sp\*'ecification, personne ne sera surpris qu'il contienne tous les op\*'erateurs 
  1537. Add (ajouter), Delete (supprimer) et Is
  1538. \(ulin (est
  1539. \(uldans) et un litt\*'eral pour l'ensemble vide. Les \*'equations donn\*'ees 
  1540. pour ces op\*'erateurs facilitent la 
  1541. g\*'en\*'eralisation \*`a d'autres ensembles.
  1542. .PP
  1543. Tel est le cas o\*`u la notion de g\*'en\*'erateur se r\*'ev\*`ele utile; 
  1544. le texte commun peut \* | tre donn\*'e une fois et \* | tre utilis\*'e 
  1545. plusieurs fois. La 
  1546. figure\ D\(hy6.2.2 pr\*'esente le g\*'en\*'erateur. (A noter que les noms 
  1547. de sortes formels sont introduits par le mot cl\*'e TYPE, cela uniquement 
  1548. pour des raisons d'ordre historique.) 
  1549. .RT
  1550. .PP
  1551. Au lieu d'utiliser Integer (entier), on utilise le type formel
  1552. Item et, pour pouvoir donner diff\*'erents noms \*`a l'ensemble entier 
  1553. vide et aux ensembles vides dans d'autres types, on fait \*'egalement de 
  1554. ce litt\*'eral un 
  1555. param\*`etre formel.
  1556. .bp
  1557. .RT
  1558. .LP
  1559. .rs
  1560. .sp 24P
  1561. .ad r
  1562. \fBFigure D.6.2.2 (comme tableau) [T38.100], p. 11\fR 
  1563. .sp 1P
  1564. .RT
  1565. .ad b
  1566. .RT
  1567. .PP
  1568. .sp 1
  1569. Avec ce g\*'en\*'erateur, le type Int
  1570. \(ulset peut \* | tre construit comme
  1571. suit:
  1572. .RT
  1573. .LP
  1574.     NEWTYPE Int
  1575. \(ulset Set (Integer, empty
  1576. \(ulint
  1577. \(ulset)
  1578. .LP
  1579.     ENDNEWTYPE Int
  1580. \(ulset;
  1581. .PP
  1582. Si l'on compare les figures D\(hy6.2.1 et D\(hy6.2.2, on
  1583. constate que:
  1584. .LP
  1585.     a)
  1586.     GENERATOR et ENDGENERATOR sont remplac\*'es par NEWTYPE et
  1587. ENDNEWTYPE respectivement;
  1588. .LP
  1589.     b)
  1590.     les param\*`etres formels de g\*'en\*'erateur (le texte entre
  1591. parenth\*`eses apr\*`es le nom de g\*'en\*'erateur) sont supprim\*'es;
  1592. .LP
  1593.     c)
  1594.     Set, Item et empty
  1595. \(ulset sont remplac\*'es dans tout le
  1596. g\*'en\*'erateur par Int
  1597. \(ulset, Integer et empty
  1598. \(ulint
  1599. \(ulset,
  1600. respectivement.
  1601. .PP
  1602. Ainsi, il n'y a en fait aucune diff\*'erence entre cet
  1603. Int
  1604. \(ulset et celui de la figure\ D\(hy6.2.1, mais\ . |  | 
  1605. .LP
  1606.     \(em
  1607.      si l'on a besoin d'un ensemble de valeurs Pid, on peut cr\*'eer le type 
  1608. \*`a l'aide de: 
  1609. .LP
  1610.     NEWTYPE PId\(hyset Set(PId, empty
  1611. \(ulpid
  1612. \(ulset)
  1613. .LP
  1614.     ENDNEWTYPE PId
  1615. \(ulset;
  1616. .LP
  1617.     \(em
  1618.     si l'on a besoin d'un ensemble d'abonn\*'es, dans lequel les
  1619. abonn\*'es sont repr\*'esent\*'es par un type introduisant la sorte Subscr, 
  1620. l'ensemble d'abonn\*'es peut \* | tre cr\*'e\*'e \*`a l'aide de: 
  1621. .LP
  1622.     NEWTYPE Subscr
  1623. \(ulset Set(Subscr,
  1624. empty
  1625. \(ulsubscr
  1626. \(ulset)
  1627. .LP
  1628.     ENDNEWTYPE Subscr
  1629. \(ulset;
  1630. .LP
  1631.      Cela permet d'\*'economiser du papier, de plus, le travail est facilit\*'e 
  1632. parce qu'il suffit de penser une fois aux ensembles et que ce travail peut 
  1633. \* | tre d\*'el\*'egu\*'e \*`a des sp\*'ecialistes qualifi\*'es sur les 
  1634. types de donn\*'ees 
  1635. abstraites.
  1636. .bp
  1637. .sp 1P
  1638. .LP
  1639.     \fIExemple:\fR 
  1640. .sp 9p
  1641. .RT
  1642. .LP
  1643.     Cet exemple montre un g\*'en\*'erateur utilisant une sorte, un
  1644. op\*'erateur, un litt\*'eral et une constante formels. Il d\*'ecrit une 
  1645. rang\*'ee 
  1646. d'\*'el\*'ements ayant une longueur maximale max
  1647. \(ullength. La sorte comprend un
  1648. litt\*'eral d\*'esignant la rang\*'ee vide et les op\*'erateurs pour insertion 
  1649. et 
  1650. suppression d'\*'el\*'ements dans une rang\*'ee ou de celle\(hyci, l'encha\* | nement 
  1651. de 
  1652. rang\*'ees, le choix d'une sous\(hyrang\*'ee et la d\*'etermination de 
  1653. la longueur d'une 
  1654. rang\*'ee. Ce dernier op\*'erateur est rendu formel ce qui permet de la 
  1655. nommer \*`a 
  1656. nouveau.
  1657. .LP
  1658.     GENERATOR Row (TYPE Item, OPERATOR Length, LITERAL Empty,
  1659. .LP
  1660.     \ \ \ \ \ \ \ \ \ \ \ \ CONSTANT max
  1661. \(ullength)
  1662. .LP
  1663.     \ \ LITERALS Empty
  1664. .LP
  1665.     \ \ OPERATORS
  1666. .LP
  1667.     \ \ \ \ Length: Row
  1668.     \(hy> Integer;
  1669. .LP
  1670.     \ \ \ \ Insert: Row, Item, Integer
  1671.     \(hy> Row;
  1672. .LP
  1673.     \ \ \ \ Delete: Row, Integer, Integer
  1674.     \(hy> Row;
  1675. .LP
  1676.     \ \ \ \ "//": Row, Row
  1677.     \(hy> Row;
  1678. .LP
  1679.     \ \ \ \ Select: Row, Integer, Integer
  1680.     \(hy> Row
  1681. .LP
  1682.     \ \ \ \ /* and other operators relevant for rows of items */
  1683. .LP
  1684.     \ \ AXIOMS
  1685. .LP
  1686.     \ \ \ \ /* The equations for the operators above, among *
  1687. .LP
  1688.     \ \ \ \ /
  1689. * which the following two (or equivalents)
  1690. */
  1691. .LP
  1692.     \ \ \ \ Length(r) = max
  1693. \(ullength ==> Insert(r, itm, int) == Error!;
  1694. .LP
  1695.     \ \ \ \ Length(r1) + Length(r2) > max
  1696. \(ullength ==> r1//r2 == Error!
  1697. .LP
  1698.     ENDGENERATOR Row;
  1699. .LP
  1700.     A noter que l'op\*'erateur formel Length (longueur) et le
  1701. litt\*'eral Empty (vide) sont donn\*'es une fois de plus dans le corps 
  1702. du g\*'en\*'erateur parce qu'ils sont renomm\*'es lors de leur instantiation. 
  1703. Dans le cas de 
  1704. l'op\*'erateur, les arguments et la sorte de r\*'esultat ne sont donn\*'es 
  1705. que dans le corps. Le g\*'en\*'erateur Row (rang\*'ee) peut servir \*`a 
  1706. faire des lignes, des pages et des livres, comme suit: 
  1707. .LP
  1708.     NEWTYPE Line Row(Character, Width, Empty
  1709. \(ulline, 80)
  1710. .LP
  1711. ENDNEWTYPE Line;
  1712. .LP
  1713.     NEWTYPE Page Row(Line, Length, Empty
  1714. \(ulpage, 66)
  1715. .LP
  1716. ENDNEWTYPE Page;
  1717. .LP
  1718.     NEWTYPE Book Row(Page, Nr
  1719. \(ulof
  1720. \(ulpages,
  1721. Empty
  1722. \(ulbook,\ 10000)
  1723. .LP
  1724. ENDNEWTYPE Book;
  1725. .sp 1P
  1726. .LP
  1727. D.6.2.2
  1728.     \fIH\*'eritage\fR 
  1729. .sp 9p
  1730. .RT
  1731. .PP
  1732. L'h\*'eritage constitue un moyen d'\*'etablir toutes les valeurs de la
  1733. sorte dite parente, certains ou tous les op\*'erateurs du type parent et toutes
  1734. les \*'equations du type parent. Pour les litt\*'eraux et les op\*'erateurs, 
  1735. il existe une possibilit\*'e de les nommer \*`a nouveau. En g\*'en\*'eral, 
  1736. c'est une m\*'ethode 
  1737. satisfaisante parce que, dans ce cas, le lecteur peut d\*'eduire du contexte 
  1738. qu'il s'agit d'un autre type, m\* | me si les litt\*'eraux sont les m\* | mes. 
  1739. .PP
  1740. Si un op\*'erateur n'est pas h\*'erit\*'e, on lui attribue syst\*'ematiquement 
  1741. un autre nom inaccessible \*`a l'utilisateur. Le fait que les op\*'erateurs 
  1742. sont encore pr\*'esents signifie que toutes les \*'equations du type parent 
  1743. sont encore pr\*'esentes (avec des op\*'erateurs portant un autre nom). 
  1744. Cela garantit que les valeurs 
  1745. parentes sont h\*'erit\*'ees.
  1746. .PP
  1747. Avec la possibilit\*'e d'emp\* | cher l'utilisation d'un op\*'erateur
  1748. (lorsqu'il n'est pas h\*'erit\*'e), on assure la possibilit\*'e d'ajouter 
  1749. de nouveaux 
  1750. op\*'erateurs. Apr\*`es le mot cl\*'e ADDING, on peut donner des litt\*'eraux, 
  1751. des 
  1752. op\*'erateurs et des \*'equations comme dans un type ordinaire. Toutefois, 
  1753. il faut 
  1754. faire attention aux nouveaux litt\*'eraux et aux confusions possibles entre
  1755. op\*'erateurs h\*'erit\*'es et ajout\*'es.
  1756. .PP
  1757. Lorsque les litt\*'eraux sont ajout\*'es, le r\*'esultat des op\*'erateurs
  1758. h\*'erit\*'es, appliqu\*'es \*`a des nouveaux litt\*'eraux, doit \* | tre 
  1759. d\*'efini (par des 
  1760. \*'equations). Lorsque des op\*'erateurs sont ajout\*'es, il ne faut pas 
  1761. oublier les 
  1762. op\*'erateurs nomm\*'es \*`a nouveau de mani\*`ere invisible et les \*'equations 
  1763. associ\*'ees. Les \*'equations de d\*'efinition des op\*'erateurs ajout\*'es 
  1764. devraient \* | tre compatibles avec les \*'equations comportant des op\*'erateurs 
  1765. h\*'erit\*'es et non h\*'erit\*'es. 
  1766. .bp
  1767. .PP
  1768. Apr\*`es cette liste d'avertissements, prenons quelques
  1769. exemples:
  1770. .RT
  1771. .LP
  1772.     a)
  1773.      Supposons que le newtype couleur est complet et disponible. Ce type est 
  1774. fond\*'e sur le choix et le m\*'elange de faisceaux de lumi\*`ere de couleur 
  1775. primaire. Il faudrait de longues r\*'eflexions et un long texte et/ou copie 
  1776. pour d\*'efinir quelque chose de semblable pour le choix et le m\*'elange 
  1777. de peinture. 
  1778. .LP
  1779.     Une solution commode \*`a ce probl\*`eme consiste \*`a faire du
  1780. newtype Colour (couleur) un g\*'en\*'erateur en effectuant uniquement deux
  1781. remplacements:
  1782. .LP
  1783.     1)
  1784.     la premi\*`ere ligne
  1785. .LP
  1786.     \ \ NEWTYPE Colour
  1787. .LP
  1788.     devient
  1789. .LP
  1790.     \ \ GENERATOR Colour (TYPE Primary
  1791. \(ulcolour)
  1792. .LP
  1793.     2)
  1794.     le mot\(hycl\*'e ENDNEWTYPE devient ENDGENERATOR.
  1795. .LP
  1796.      On peut maintenant nommer \*`a nouveau le g\*'en\*'erateur lorsqu'il 
  1797. est instanci\*'e. Supposons que la sorte ant\*'erieure Primary 
  1798. \(ulcolour soit appel\*'ee  Light
  1799. \(ulprimary, et que la sorte Paint
  1800. \(ulprimary soit d\*'efinie comme:
  1801. .LP
  1802.     NEWTYPE Paint
  1803. \(ulprimary
  1804. .LP
  1805.     \ \ LITERALS Red, Yellow, Blue
  1806. .LP
  1807.     ENDNEWTYPE Paint
  1808. \(ulprimary;
  1809. .PP
  1810. Il est maintenant tr\*`es facile de d\*'efinir deux types similaires, un 
  1811. pour la lumi\*`ere et un pour la peinture: 
  1812. .LP
  1813.     NEWTYPE Light
  1814. \(ulcolours Colour (Light
  1815. \(ulprimary)
  1816. ENDNEWTYPE;
  1817. .LP
  1818.     NEWTYPE Paint
  1819. \(ulcolours Colour (Paint
  1820. \(ulprimary)
  1821. ENDNEWTYPE;
  1822. .PP
  1823. Il n'y a pas de probl\*`eme jusqu'ici, mais comment peut\(hyon voir la
  1824. diff\*'erence entre Take (Red) de Light
  1825. \(ulcolour et celui de Paint
  1826. \(ulcolour avec la m\* | me syntaxe? S'il est n\*'ecessaire de distinguer 
  1827. entre ces deux termes, on peut avoir recours \*`a l'h\*'eritage. Au lieu 
  1828. de Light 
  1829. \(ulcolours et
  1830. Paint
  1831. \(ulcolours, les types Light (lumi\*`ere) et Palette sont d\*'efinis par
  1832. h\*'eritage et le nom de l'op\*'erateur Take (prendre) est modifi\*'e:
  1833. .LP
  1834.     NEWTYPE Light
  1835. .LP
  1836.     \ \ INHERITS Light
  1837. \(ulcolours
  1838. .LP
  1839.     \ \ OPERATORS (Beam=Take, Mix, Contains)
  1840. .LP
  1841.     \ \ ADDING
  1842. .LP
  1843.     \ \ \ \ LITERALS White
  1844. .LP
  1845.     \ \ \ \ AXIOMS
  1846. .LP
  1847.     \ \ \ \ \ \ White == Mix (Red, Mix (Yellow, Beam (Blue)))
  1848. .LP
  1849.     ENDNEWTYPE Light;
  1850. .LP
  1851.     Maintenant le newtype Light (lumi\*`ere) a les litt\*'eraux de
  1852. Light
  1853. \(ulcolours et le litt\*'eral White (blanc). Light 
  1854. \(ulcolours n'a pas de
  1855. litt\*'eraux qui lui soient propres (car il utilise les litt\*'eraux de
  1856. Light
  1857. \(ulprimary), de sorte que White est le seul litt\*'eral de Light. Les
  1858. op\*'erateurs et les \*'equations de Light sont les m\* | mes que ceux de
  1859. Light
  1860. \(ulcolours, \*`a l'exception du fait que le nom d'op\*'erateur Take est
  1861. remplac\*'e par Beam (faisceau) et que l'\*'equation pour White a \*'et\*'e 
  1862. ajout\*'ee. 
  1863. L'axiome ajout\*'e indique que ce litt\*'eral ajout\*'e devient un \*'el\*'ement 
  1864. de l'ensemble de termes dans lequel les trois couleurs primaires sont m\*'elang\*'ees. 
  1865. .LP
  1866.     Le newtype Palette a les litt\*'eraux de Paint
  1867. \(ulcolours et
  1868. l'op\*'erateur Take est remplac\*'e par Paint (peinture):
  1869. .LP
  1870.     NEWTYPE Palette
  1871. .LP
  1872.     \ \ INHERITS Paint
  1873. \(ulcolours
  1874. .LP
  1875.     \ \ OPERATORS (Paint
  1876. \(ulTake, Mix, Contains)
  1877. .LP
  1878.     ENDNEWTYPE Palette;
  1879. .LP
  1880.     b)
  1881.     Admettons que l'on veuille \*'etendre l'ensemble de types
  1882. entiers (sorte Int
  1883. \(ulset), introduit dans la section pr\*'ec\*'edente, par un
  1884. op\*'erateur qui trouve le plus petit entier de l'ensemble. Tout d'abord, 
  1885. il faut se demander si cet op\*'erateur peut \* | tre introduit dans la 
  1886. d\*'efinition de 
  1887. g\*'en\*'erateur pour le rendre disponible \*`a tous les ensembles et autres
  1888. choses.
  1889. .bp
  1890. .LP
  1891.     S'il est vrai que cela peut \* | tre fait, cela limiterait
  1892. l'\*'el\*'ement \*`a la d\*'efinition de > et <. Cela ne convient pas \*`a 
  1893. tous les \*'el\*'ements (PId par exemple) et il peut \* | tre pr\*'ef\*'erable 
  1894. de cr\*'eer un newtype ayant la 
  1895. sorte New
  1896. \(ulint
  1897. \(ulset comportant un op\*'erateur Min.
  1898. .LP
  1899.     NEWTYPE New
  1900. \(ulint
  1901. \(ulset
  1902. .LP
  1903.     \ \ INHERITS Int
  1904. \(ulset
  1905. .LP
  1906.     \ \ OPERATORS ALL
  1907. .LP
  1908.     \ \ ADDING
  1909. .LP
  1910.     \ \ \ \ OPERATORS
  1911. .LP
  1912.     \ \ \ \ \ \ Min: New
  1913. \(ulint
  1914. \(ulset\(hy> Integer
  1915. .LP
  1916.     \ \ \ \ AXIOMS
  1917. .LP
  1918.     \ \ \ \ \ \ Min(Empty
  1919. \(ulint
  1920. \(ulset) == Error!;
  1921. .LP
  1922.     \ \ \ \ \ \ Min(Add(Empty
  1923. \(ulint
  1924. \(ulset, x))==x;
  1925. .LP
  1926.     \ \ \ \ \ \ Min(Add(Add(nis,x),y))==
  1927. .LP
  1928.     \ \ \ \ \ \ \ \ IF y <Min(Add(nis,x))
  1929. .LP
  1930.     \ \ \ \ \ \ \ \ THEN y
  1931. .LP
  1932.     \ \ \ \ \ \ \ \ ELSE Min(Add(nis,x))
  1933. .LP
  1934.     \ \ \ \ \ \ \ \ FI
  1935. .LP
  1936.     ENDNEWTYPE New
  1937. \(ulint
  1938. \(ulset;
  1939. .PP
  1940. Etant donn\*'e que l'adjonction apr\*`es une instantiation de g\*'en\*'erateur 
  1941. est relativement courante, le texte commen\*,cant par ADDING et se terminant 
  1942. juste avant le ENDNEWTYPE peut \* | tre donn\*'e \*`a l'int\*'erieur de 
  1943. l'instantiation de g\*'en\*'erateur. On en trouvera un exemple au \(sc\ 
  1944. 5.4.1.12 de la Recommandation. 
  1945. .sp 1P
  1946. .LP
  1947. D.6.3
  1948.     \fIObservations relatives aux \*'equations\fR 
  1949. .sp 9p
  1950. .RT
  1951. .PP
  1952. Lorsque l'on introduit un nouveau type de donn\*'ees, il est essentiel 
  1953. d'introduire suffisamment d'\*'equations. Dans les paragraphes qui suivent, 
  1954. trois observations sont pr\*'esent\*'ees concernant les \*'equations qui 
  1955. en faciliteront 
  1956. l'\*'etablissement.
  1957. .RT
  1958. .sp 1P
  1959. .LP
  1960. D.6.3.1
  1961.     \fIConditions g\*'en\*'erales\fR 
  1962. .sp 9p
  1963. .RT
  1964. .PP
  1965. De quelque mani\*`ere que l'on construise les \*'equations, il faut
  1966. tenir compte des faits suivants:
  1967. .RT
  1968. .LP
  1969.     a)
  1970.      chaque op\*'erateur appara\* | t au moins une fois dans l'ensemble des 
  1971. \*'equations (sauf pour les cas <<pathologiques>>); 
  1972. .LP
  1973.     b)
  1974.     tous les \*'enonc\*'es vrais peuvent \* | tre tir\*'es des \*'equations.
  1975. Ils sont soit indiqu\*'es comme des axiomes, soit d\*'eduits par substitution 
  1976. de 
  1977. termes \*'equivalents dans les \*'equations;
  1978. .LP
  1979.     c)
  1980.     aucune incoh\*'erence doit \* | tre d\*'ecel\*'ee, c'est\(hy\*`a\(hydire que
  1981. l'on ne peut d\*'eduire des \*'equations que Vrai\ =\ Faux.
  1982. .PP
  1983. Une proc\*'edure permettant de trouver des \*'equations peut \* | tre
  1984. exprim\*'ee en LDS informel, comme indiqu\*'e dans la figure\ D\(hy6.3.1.
  1985. .sp 1P
  1986. .LP
  1987. D.6.3.2
  1988.     \fIApplication de fonctions aux\fR 
  1989. \fIconstructeurs\fR 
  1990. .sp 9p
  1991. .RT
  1992. .PP
  1993. D'une mani\*`ere g\*'en\*'erale, l'ensemble d'op\*'erateurs poss\*`ede un
  1994. sous\(hyensemble d'op\*'erateurs appel\*'es <<constructeurs>> et <<fonctions>>. 
  1995. Les 
  1996. constructeurs peuvent servir \*`a g\*'en\*'erer toutes les valeurs (classes
  1997. d'\*'equivalence) de la sorte. Dans cette approche, les litt\*'eraux sont 
  1998. consid\*'er\*'es comme des op\*'erateurs sans argument. 
  1999. .RT
  2000. .sp 1P
  2001. .LP
  2002.     \fIExemples:\fR 
  2003. .sp 9p
  2004. .RT
  2005. .LP
  2006.     a)
  2007.     le type bool\*'een a ses litt\*'eraux pour constructeurs;
  2008. .LP
  2009.     b)
  2010.     le type naturel a le litt\*'eral 0 et l'op\*'erateur Next comme
  2011. constructeurs; un naturel quelconque peut \* | tre construit seulement avec\ 0
  2012. et\ Next;
  2013. .LP
  2014.     c)
  2015.     le g\*'en\*'erateur pour les ensembles a le litt\*'eral
  2016. ensemble
  2017. \(ulvide et l'op\*'erateur
  2018. \(uladditif comme constructeurs; un ensemble
  2019. quelconque ne peut \* | tre construit qu'en utilisant Empty
  2020. \(ulset
  2021. (ensemble
  2022. \(ulvide) et Add (ajouter);
  2023. .LP
  2024.     d)
  2025.      le type entier peut \* | tre construit au moyen des litt\*'eraux 0 et\ 
  2026. 1, des op\*'erateurs\ + et moins unaires. 
  2027. .bp
  2028. .LP
  2029. .rs
  2030. .sp 33P
  2031. .ad r
  2032. \fBFigura D\(hy6.3.1, (N), p. 12\fR 
  2033. .sp 1P
  2034. .RT
  2035. .ad b
  2036. .RT
  2037. .PP
  2038. A noter qu'il y a parfois plusieurs choix possibles pour
  2039. l'ensemble de constructeurs. Tout choix sera valable pour le reste de la
  2040. pr\*'esente section mais les petits ensembles sont g\*'en\*'eralement les 
  2041. meilleurs. 
  2042. .PP
  2043. Ensuite, les fonctions sont trait\*'ees une par une. Pour chaque argument 
  2044. d'une fonction, seuls sont \*'enum\*'er\*'es tous les termes possibles 
  2045. compos\*'es de 
  2046. constructeurs. Pour \*'eviter le probl\*`eme que posent les nombres infinis de
  2047. termes, il faut appliquer la quantification.
  2048. .RT
  2049. .sp 1P
  2050. .LP
  2051.     \fIExemples:\fR 
  2052. .sp 9p
  2053. .RT
  2054. .LP
  2055.     a)
  2056.     Pour les nombres naturels, cette liste peut \* | tre
  2057. r\*'eduite \*`a:
  2058. .LP
  2059.     0
  2060. .LP
  2061.     Next (n) o\*`u n est tout nombre naturel.
  2062. .LP
  2063.     b)
  2064.     Pour les ensembles, la liste \*'eventuelle peut \* | tre:
  2065. .LP
  2066.     empty
  2067. \(ulset
  2068. .LP
  2069.     Add (s,i) o\*`u s est tout ensemble et i tout \*'el\*'ement
  2070. (item).
  2071. .PP
  2072. Si, dans le terme de droite d'une \*'equation ayant (s,i) du c\* | t\*'e
  2073. gauche, il y a une diff\*'erence entre s \*'etant vide ou n'\*'etant pas 
  2074. vide, on peut r\*'e\*'ecrire la liste comme suit: 
  2075. .LP
  2076.     empty
  2077. \(ulset
  2078. .LP
  2079.     Add (empty
  2080. \(ulset,i) o\*`u i est un \*'el\*'ement (item)
  2081. quelconque,
  2082. .LP
  2083.      Add (Add (s,i),j) o\*`u s est un ensemble quelconque et i, j, un \*'el\*'ement 
  2084. quelconque. 
  2085. .bp
  2086. .PP
  2087. Apr\*`es la cr\*'eation de cette liste, on obtient les parties de
  2088. gauche des \*'equations en appliquant chaque fonction \*`a une combinaison
  2089. d'arguments tir\*'es de la liste. Les identificateurs de valeurs de diff\*'erents 
  2090. arguments re\*,coivent des noms diff\*'erents. La proc\*'edure indiqu\*'ee 
  2091. ci\(hydessus pour les fonctions peut \* | tre appliqu\*'ee aux constructeurs; 
  2092. dans ce cas, elle donne les relations entre des termes o\*`u les constructeurs 
  2093. sont utilis\*'es dans 
  2094. diff\*'erents ordres.
  2095. .sp 1P
  2096. .LP
  2097.     \fIExemples:\fR 
  2098. .sp 9p
  2099. .RT
  2100. .LP
  2101.     a)
  2102.     Pour l'op\*'erateur de multiplication de nombres naturels
  2103. portant la signature
  2104. .LP
  2105.     <<*>>:Natural, Natural \(hy> Natural
  2106. .LP
  2107.     Cette proc\*'edure donne la partie de gauche des \*'equations
  2108. (incompl\*`etes) suivantes. L'utilisateur devra ajouter la partie de droite.
  2109. .LP
  2110.     Next (n)
  2111. 0*0
  2112.     ==
  2113.     . |  | ;
  2114. .LP
  2115.     Next (n)
  2116. 0*Next (n)
  2117.     ==
  2118.     . |  | ;
  2119. .LP
  2120.     Next (n)*0
  2121.     ==
  2122.     . |  | ;
  2123. .LP
  2124.     Next (n)*Next (m)
  2125.     ==
  2126.     . |  | ;
  2127. .LP
  2128.     b)
  2129.     Pour les op\*'erateurs Is
  2130. \(ulin (est
  2131. \(uldans) et Delete
  2132. (supprimer, dans le g\*'en\*'erateur Set (voir le \(sc\ D.6.2.1), cette 
  2133. approche est 
  2134. d\*'ej\*`a appliqu\*'ee.
  2135. .LP
  2136.     c)
  2137.     Pour la sorte Colour, les constructeurs sont Take et Mix.
  2138. Un op\*'erateur analogue \*`a Contains dans le \(sc\ D.6.1.4.2 doit \* | tre 
  2139. d\*'efini 
  2140. pour les arguments.
  2141. .LP
  2142.     Take(p) o\*`u p est toute couleur primaire
  2143. .LP
  2144.     Mix(p,c) o\*`u p est toute couleur primaire et c une couleur
  2145. quelconque.
  2146. .LP
  2147.     Etant donn\*'e que l'on avait annonc\*'e au \(sc D.6.1.4.2 que les
  2148. \*'equations compl\*`etes seraient donn\*'ees pour cet op\*'erateur:
  2149. .LP
  2150.     Contains(Take(p),q) ==p=q;
  2151. .LP
  2152.     Contains(Mix(p,c),q) ==(p=q) OR Contains(c,q);
  2153. .PP
  2154. Cette proc\*'edure de construction peut donner plus d'\*'equations que 
  2155. cela n'est n\*'ecessaire, mais elle est tr\*`es s\* | re. Dans l'exemple 
  2156. susmentionn\*'e de multiplication des nombres naturels, il est vraisemblable 
  2157. que la propri\*'et\*'e de commutativit\*'e de la multiplication sera indiqu\*'ee 
  2158. et qu'en cons\*'equence, seule la derni\*`ere (ou la seconde) \*'equation 
  2159. des trois premi\*`eres sera n\*'ecessaire. 
  2160. .PP
  2161. La proc\*'edure d\*'ecrite dans cette section peut \* | tre appliqu\*'ee en
  2162. combinaison avec la proc\*'edure d\*'ecrite dans la section pr\*'ec\*'edente, 
  2163. o\*`u elle est utile pour la t\* | che <<Penser 
  2164. \(ul\*`a
  2165. \(ulun
  2166. \(ul\*'enonc\*'e>>.
  2167. .RT
  2168. .sp 1P
  2169. .LP
  2170. D.6.3.3
  2171.     \fISp\*'ecification d'ensemble d'essai\fR 
  2172. .sp 9p
  2173. .RT
  2174. .PP
  2175. On peut aussi consid\*'erer les \*'equations du point de vue de la mise 
  2176. en oeuvre. Si les op\*'erateurs sont mis en oeuvre sous la forme de fonctions 
  2177. dans un langage de programmation, les \*'equations montrent comment ces 
  2178. fonctions 
  2179. doivent \* | tre test\*'ees.
  2180. .PP
  2181. Il convient d'\*'evaluer les expressions correspondant \*`a la partie de
  2182. gauche d'une \*'equation, de faire de m\* | me pour la partie droite de cette
  2183. \*'equation et de voir si elles sont \*'equivalentes. C'est la construction 
  2184. FOR ALL qui pourrait poser certains probl\*`emes. Ceux\(hyci peuvent souvent 
  2185. \* | tre r\*'esolus de mani\*`ere pragmatique: 
  2186. .RT
  2187. .LP
  2188.     Au lieu de
  2189. tif de test peut utiliser
  2190. \ \ FOR ALL i IN Integer
  2191. .LP
  2192.     le dispositif de test peut utiliser\ \ FOR ALL i IN { (em10,\(em1,0,1,1 }
  2193. et proc\*'eder ainsi dans la plupart des cas.
  2194. .PP
  2195. Consid\*'erer des \*'equations comme n\*'ecessaires \*`a la mise en oeuvre
  2196. peut \* | tre utile pour ce qui est de la t\* | che <<Penser
  2197. \(ul\*`a
  2198. \(ulun
  2199. \(ul\*'enonc\*'e>>
  2200. dans la proc\*'edure du \(sc\ D.6.3.1.
  2201. .sp 1P
  2202. .LP
  2203. D.6.4
  2204.     \fICaract\*'eristiques\fR 
  2205. .sp 9p
  2206. .RT
  2207. .PP
  2208. La pr\*'esente section d\*'ecrit certains dispositifs du LDS qui sont
  2209. rarement n\*'ecessaires dont on peut pratiquement se passer, mais qui rendent
  2210. quelquefois la t\* | che plus facile.
  2211. .RT
  2212. .sp 1P
  2213. .LP
  2214. D.6.4.1
  2215.     \fIOp\*'erateurs cach\*'es\fR 
  2216. .sp 9p
  2217. .RT
  2218. .PP
  2219. Il arrive que l'ensemble des \*'equations puisse \* | tre simplifi\*'e ou
  2220. rendu plus lisible gr\* | ce \*`a l'introduction d'un op\*'erateur suppl\*'ementaire, 
  2221. mais cet op\*'erateur ne devrait pas \* | tre utilis\*'e dans les processus. 
  2222. Cela signifie 
  2223. que l'op\*'erateur est visible de l'int\*'erieur mais cach\*'e en dehors de la
  2224. d\*'efinition de type.
  2225. .bp
  2226. .PP
  2227. On peut atteindre ce r\*'esultat en d\*'efinissant un <<type cach\*'e>>,
  2228. c'est\(hy\*`a\(hydire un type que l'utilisateur ne doit pas employer. A 
  2229. partir de ce 
  2230. type cach\*'e, l'utilisateur peut h\*'eriter de tous les op\*'erateurs 
  2231. auxquels il peut avoir acc\*`es; c'est le type h\*'erit\*'e qui doit \* | tre 
  2232. utilis\*'e. On peut s'assurer 
  2233. qu'il est correctement employ\*'e en examinant toutes les d\*'eclarations de
  2234. variables (aucune variable de sorte introduite par le type cach\*'e ne doit
  2235. appara\* | tre).
  2236. .PP
  2237. Ce qui caract\*'erise les op\*'erateurs cach\*'es, c'est qu'ils peuvent 
  2238. \* | tre atteints par une restriction de leur visibilit\*'e aux seules 
  2239. \*'equations. On peut le faire en pla\*,cant un point d'exclamation apr\*`es 
  2240. l'op\*'erateur. 
  2241. .RT
  2242. .sp 1P
  2243. .LP
  2244.     \fIExemple:\fR 
  2245. .sp 9p
  2246. .RT
  2247. .PP
  2248. La mani\*`ere courante de faire un ensemble d'un \*'el\*'ement \*`a partir
  2249. du g\*'en\*'erateur Set est la suivante:
  2250. .RT
  2251. .LP
  2252.     Add(empty
  2253. \(ulset,x)
  2254. .LP
  2255. et c'est ainsi que doit le faire chaque utilisateur. Dans les \*'equations, le
  2256. sp\*'ecificateur peut utiliser un op\*'erateur sp\*'ecial, par exemple:
  2257. .LP
  2258.     Mk
  2259. \(ulset!:Item\(hy>Set;
  2260. .LP
  2261. d\*'efini par l'\*'equation:
  2262. .LP
  2263.     Mk
  2264. \(ulset!(itm) == Add(empty
  2265. \(ulset,itm);
  2266. .LP
  2267. qui peut \* | tre utilis\*'e dans des d\*'efinitions de type partiel mais 
  2268. non dans le 
  2269. corps de processus en LDS.
  2270. .sp 1P
  2271. .LP
  2272. D.6.4.2
  2273.     \fIRelations d'ordre\fR 
  2274. .sp 9p
  2275. .RT
  2276. .PP
  2277. Lorsqu'il faut sp\*'ecifier une relation d'ordre sur les \*'el\*'ements
  2278. d'une sorte, cela signifie en g\*'en\*'eral qu'il faut d\*'efinir quatre 
  2279. op\*'erateurs 
  2280. (<,<=,>,>=) et les propri\*'et\*'es math\*'ematiques ordinaires (transitivit\*'e, 
  2281. etc.). 
  2282. S'il y a de nombreux litt\*'eraux, il faut \*'egalement donner de nombreuses
  2283. \*'equations. Par exemple, le type de donn\*'ees pr\*'ed\*'efinies Character 
  2284. est d\*'efini de cette mani\*`ere. 
  2285. .PP
  2286. Le LDS comporte une caract\*'eristique qui permet d'abr\*'eger ces
  2287. d\*'efinitions de type longues, peu lisibles et ennuyeuses: c'est l'abr\*'eviation 
  2288. ORDERING (relation d'ordre).
  2289. .PP
  2290. ORDERING est donn\*'e dans la liste d'op\*'erateurs, de pr\*'ef\*'erence 
  2291. au d\*'ebut ou \*`a la fin de celle\(hyci. Cela permet d'introduire des 
  2292. op\*'erateurs de relation d'ordre et les \*'equations normales. Lorsque 
  2293. ORDERING est sp\*'ecifi\*'e, il faut 
  2294. donner les litt\*'eraux, s'il en existe, dans l'ordre ascendant.
  2295. .RT
  2296. .sp 1P
  2297. .LP
  2298.     \fIExemple:\fR 
  2299. .sp 9p
  2300. .RT
  2301. .LP
  2302.     NEWTYPE Even
  2303. \(uldecimal
  2304. \(uldigit
  2305. .LP
  2306.     \ \ LITERALS 0,2,4,6,8
  2307. .LP
  2308.     \ \ OPERATORS
  2309. .LP
  2310.     \ \ \ \ ORDERING
  2311. .LP
  2312.     ENDNEWTYPE Even
  2313. \(uldecimal
  2314. \(uldigit;
  2315. .PP
  2316. Maintenant, l'ordre 0<2<4<6<8 est implicite.
  2317. .PP
  2318. Au \(sc D.6.2.2 (H\*'eritage), on soulignait qu'il fallait s'assurer que 
  2319. les litt\*'eraux \*'etaient ajout\*'es \*`a une sorte h\*'erit\*'ee. Il 
  2320. convient d'en indiquer ici la raison. 
  2321. .PP
  2322. Admettons que l'on d\*'esire l'extension suivante de la sorte
  2323. Even
  2324. \(uldecimal
  2325. \(uldigit:
  2326. .RT
  2327. .LP
  2328.     NEWTYPE Decimal
  2329. \(uldigit
  2330. .LP
  2331.     \ \ INHERITS Even
  2332. \(uldecimal
  2333. \(uldigit
  2334. .LP
  2335.     \ \ OPERATORS ALL
  2336. .LP
  2337.     \ \ ADDING
  2338. .LP
  2339.     \ \ \ \ LITERALS 1,3,5,7,9
  2340. .LP
  2341.     \ \ \ \ AXIOMS
  2342. .LP
  2343.     \ \ \ \ \ \ 0<1; 1<2;
  2344. .LP
  2345.     \ \ \ \ \ \ 2<3; 3<4;
  2346. .LP
  2347.     \ \ \ \ \ \ 4<5; 5<6;
  2348. .LP
  2349.     \ \ \ \ \ \ 6<7; 7<8;
  2350. .LP
  2351.     \ \ \ \ \ \ 8<9
  2352. .LP
  2353.     ENDNEWTYPE Decimal
  2354. \(uldigit;
  2355. .bp
  2356. .PP
  2357. Les axiomes donn\*'es ici ne peuvent \* | tre omis. Sans ces axiomes, il 
  2358. ne peut y avoir qu'un ordre dit partiel: 
  2359. .LP
  2360.     0<2<4<6<8
  2361. .LP
  2362. et
  2363. .LP
  2364.     1<3<5<7<9.
  2365. .PP
  2366. Avec les axiomes ci\(hydessus, on obtient un ordre complet:
  2367. .LP
  2368.     0<1<2<3<4<5<6<7<8<9
  2369. .LP
  2370. mais avec l'axiome <<9<0>> au lieu de l'ensemble d'axiomes ci\(hydessus, 
  2371. l'ordre 
  2372. complet serrait le suivant:
  2373. .LP
  2374.     1<3<5<7<9<0<2<4<6<8.
  2375. .sp 1P
  2376. .LP
  2377. D.6.4.3
  2378.     \fISortes avec champs\fR 
  2379. .sp 9p
  2380. .RT
  2381. .PP
  2382. Comme indiqu\*'e au \(sc 5.4.1.10 de la Recommandation, on peut d\*'efinir 
  2383. une sorte structur\*'ee sans constructions sp\*'eciales, mais les sortes 
  2384. structur\*'ees sont \*`a la fois courantes et utiles, ce qui justifie certaines 
  2385. constructions 
  2386. suppl\*'ementaires dans le langage.
  2387. .PP
  2388. Une sorte structur\*'ee devrait \* | tre utilis\*'ee lorsqu'une valeur 
  2389. d'objet est form\*'ee par l'association de valeurs de plusieurs sortes. 
  2390. Chaque valeur de cette association est caract\*'eris\*'ee par un nom, appel\*'e 
  2391. nom de champ. La sorte 
  2392. d'un champ est fixe.
  2393. .RT
  2394. .sp 1P
  2395. .LP
  2396.     \fIExemples:\fR 
  2397. .sp 9p
  2398. .RT
  2399. .LP
  2400.     NEWTYPE Subscriber
  2401. .LP
  2402.     \ \ STRUCT numbers Number
  2403. \(ulkey;
  2404. .LP
  2405.     \ \ \ \ \ \ name Name
  2406. \(ulkey;
  2407. .LP
  2408.     \ \ \ \ \ \ admin Administrative;
  2409. .LP
  2410.     ENDNEWTYPE Subscriber;
  2411. .LP
  2412.     NEWTYPE Name
  2413. \(ulkey
  2414. .LP
  2415.     \ \ STRUCT name,
  2416. .LP
  2417.     \ \ \ \ \ \ street Charstring;
  2418. .LP
  2419.     \ \ \ \ \ \ number Integer;
  2420. .LP
  2421.     \ \ \ \ \ \ city Charstring;
  2422. .LP
  2423.     ENDNEWTYPE Name
  2424. \(ulKey;
  2425. .PP
  2426. Avec une sorte structur\*'ee, certains op\*'erateurs sont d\*'efinis
  2427. implicitement:
  2428. .LP
  2429.     a)
  2430.     l'op\*'erateur constructeur, <<(.<<avant, et>>.)>> apr\*`es les
  2431. valeurs de champ;
  2432. .LP
  2433.     b)
  2434.     les op\*'erateurs de s\*'election de champ, les variables de la
  2435. sorte structur\*'ee suivies par un ! et le nom de champ, ou suivies par 
  2436. le nom de champ entre parenth\*`eses. Il ne faut pas confondre la variable 
  2437. suivie d'un ! 
  2438. avec l'op\*'erateur cach\*'e (\(sc\ D.6.4.1).
  2439. .PP
  2440. On trouvera un exemple dans la figure D\(hy6.4.1.
  2441. .LP
  2442. .rs
  2443. .sp 12P
  2444. .ad r
  2445. \fBFigure D.6.4.1 (comme tableau) [T39.100], p. 13\fR 
  2446. .sp 1P
  2447. .RT
  2448. .ad b
  2449. .RT
  2450. .LP
  2451. .bp
  2452. .sp 1P
  2453. .LP
  2454. D.6.4.4
  2455.     \fISortes index\*'ees\fR 
  2456. .sp 9p
  2457. .RT
  2458. .PP
  2459. Une sorte index\*'ee est une sorte pour laquelle le type a pour nom
  2460. d'op\*'erateur Extract! (extraction). Dans les types de donn\*'ees pr\*'ed\*'efinies, 
  2461. le 
  2462. g\*'en\*'erateur Array est un tel type. Array est l'un des exemples les 
  2463. plus courants de type index\*'e. 
  2464. .PP
  2465. Pour l'op\*'erateur cach\*'e Extract!, il existe une syntaxe concr\*`ete
  2466. sp\*'eciale qui doit \* | tre appliqu\*'ee en dehors des d\*'efinitions 
  2467. de type. 
  2468. .PP
  2469. On peut penser que le type Index dans le g\*'en\*'erateur pr\*'ed\*'efini Array
  2470. doit \* | tre un type <<simple>> comme Integer, Natural ou Character. Toutefois, 
  2471. il n'y a pas de raison pour qu'une structure comme Name 
  2472. \(ulkey ne puisse pas \* | tre  utilis\*'ee comme Index.
  2473. .RT
  2474. .sp 1P
  2475. .LP
  2476.     \fIExemple:\fR 
  2477. .sp 9p
  2478. .RT
  2479. .LP
  2480.     NEWTYPE Subsc
  2481. \(uldata
  2482. \(ulbase
  2483. .LP
  2484.     \ \ Array (Name
  2485. \(ulkey, Subscriber)
  2486. .LP
  2487.     ENDNEWTYPE Subsc
  2488. \(uldata
  2489. \(ulbase;
  2490. .PP
  2491. Les sortes Name
  2492. \(ulkey et Subscriber sont celles qui ont \*'et\*'e d\*'efinies dans la 
  2493. section pr\*'ec\*'edente. Supposons qu'il existe une proc\*'edure Bill 
  2494. comportant un param\*`etre de sorte Subscriber et que cette proc\*'edure soit
  2495. d\*'efinie dans un processus qui comporte aussi une variable Sub
  2496. \(uldb de la sorte  Subsc
  2497. \(uldata
  2498. \(ulbase. Dans ce processus, l'appel suivant pourrait
  2499. appara\* | tre.
  2500. .LP
  2501.     CALL Bill (Sub
  2502. \(uldb)
  2503. (. `P.M.`, `Downingstreet`10. `Londres`.)));
  2504. .sp 1P
  2505. .LP
  2506. D.6.4.5
  2507.     \fIValeur par d\*'efaut de variables\fR 
  2508. .sp 9p
  2509. .RT
  2510. .PP
  2511. Comme indiqu\*'e dans la section concernant la d\*'eclaration de
  2512. variables (\(sc\ D.3.10.1), il est possible d'affecter des valeurs \*`a 
  2513. une variable imm\*'ediatement apr\*`es la d\*'eclaration. Cependant, certains 
  2514. types ont une valeur qui sera (presque) toujours la valeur initiale d'une 
  2515. variable. Il existe une 
  2516. caract\*'eristique qui permet d'\*'eviter d'\*'ecrire la valeur initiale 
  2517. pour chaque 
  2518. d\*'eclaration: la clause DEFAULT.
  2519. .PP
  2520. A titre d'exemple, on peut consid\*'erer l'ensemble. Il est tr\*`es
  2521. probable que presque toutes les variables, de tout ensemble imaginaire, 
  2522. seront initialis\*'ees avec empty 
  2523. \(ulset.
  2524. .PP
  2525. La notation:
  2526. .RT
  2527. .LP
  2528.     DEFAULT empty
  2529. \(ulset
  2530. .LP
  2531. apr\*`es la liste d'\*'equations indique que chaque variable de chaque 
  2532. instantiation de ce g\*'en\*'erateur sera initialis\*'ee \*`a la valeur 
  2533. empty 
  2534. \(ulset de cette
  2535. instantiation, sauf s'il y a une initialisation explicite (voir le
  2536. \(sc\ D.3.10.1.)
  2537. .PP
  2538. S'il n'est par s\* | r que la valeur initiale de toutes les variables d'une 
  2539. sorte soit la m\* | me, il ne faut pas utiliser la clause DEFAULT, sinon 
  2540. il est difficile d'\*'eviter des surprises. 
  2541. .sp 1P
  2542. .LP
  2543. D.6.4.6
  2544.     \fIOp\*'erateurs actifs\fR 
  2545. .sp 9p
  2546. .RT
  2547. .PP
  2548. Les utilisateurs qui connaissent la Recommandation Z.104 de 1984
  2549. concernant le LDS pourraient se demander ce qui est arriv\*'e aux op\*'erateurs 
  2550. dits actifs. En fait, cette caract\*'eristique a \*'et\*'e supprim\*'ee, 
  2551. pour les raisons 
  2552. suivantes:
  2553. .RT
  2554. .LP
  2555.     a)
  2556.      elle n'est pas n\*'ecessaire car les op\*'erateurs courants et les proc\*'edures 
  2557. et/ou macros offrent la m\* | me capacit\*'e d'expression; 
  2558. .LP
  2559.     b)
  2560.     elle compromet la lisibilit\*'e des \*'equations;
  2561. .LP
  2562.     c)
  2563.     de nombreux utilisateurs ont eu des difficult\*'es \*`a
  2564. l'utiliser correctement;
  2565. .LP
  2566.     d)
  2567.     elle ne s'int\*`egre pas au mod\*`ele de type de donn\*'ees
  2568. abstrait fond\*'e sur les alg\*`ebres initiales qui constituent le mod\*`ele 
  2569. choisi 
  2570. comme base math\*'ematique de cette partie du LDS.
  2571. .LP
  2572. .rs
  2573. .sp 6P
  2574. .sp 2P
  2575. .LP
  2576. \fBMONTAGE: \(sc D.7 SUR LE RESTE DE CETTE PAGE\fR 
  2577. .sp 1P
  2578. .RT
  2579. .LP
  2580. .bp
  2581.